feat: add nearby social services

This commit is contained in:
ANG-Server
2026-07-21 22:19:58 +08:00
parent 77302354ac
commit b5365751bb
17 changed files with 1266 additions and 121 deletions

View File

@@ -0,0 +1,42 @@
import {
DirectMessage,
FriendRequest,
Friendship,
PlayerTravelUnlock,
SocialNotification,
UserBlock,
UserReport,
} from './social.entities';
export const SOCIAL_STORE = 'SOCIAL_STORE';
export interface SocialStore {
listFriendships(userId: bigint): Promise<Friendship[]>;
findFriendship(userLowId: bigint, userHighId: bigint): Promise<Friendship | null>;
createFriendship(userLowId: bigint, userHighId: bigint): Promise<Friendship>;
deleteFriendship(userLowId: bigint, userHighId: bigint): Promise<void>;
findPendingFriendRequest(requesterId: bigint, recipientId: bigint): Promise<FriendRequest | null>;
createFriendRequest(requesterId: bigint, recipientId: bigint, expiresAt: Date): Promise<FriendRequest>;
findFriendRequest(id: bigint): Promise<FriendRequest | null>;
saveFriendRequest(request: FriendRequest): Promise<FriendRequest>;
cancelPendingRequestsBetween(userA: bigint, userB: bigint): Promise<void>;
listFriendRequests(userId: bigint): Promise<FriendRequest[]>;
createBlock(userId: bigint, blockedUserId: bigint): Promise<UserBlock>;
deleteBlock(userId: bigint, blockedUserId: bigint): Promise<void>;
isBlocked(userId: bigint, blockedUserId: bigint): Promise<boolean>;
listBlocks(userId: bigint): Promise<UserBlock[]>;
createDirectMessage(input: Pick<DirectMessage, 'sender_id' | 'recipient_id' | 'content' | 'expires_at'>): Promise<DirectMessage>;
listDirectMessages(userA: bigint, userB: bigint, limit: number, before?: Date): Promise<DirectMessage[]>;
markDirectMessagesRead(readerId: bigint, otherUserId: bigint): Promise<number>;
listConversations(userId: bigint): Promise<DirectMessage[]>;
countUnreadDirectMessages(userId: bigint): Promise<number>;
createReport(input: Pick<UserReport, 'reporter_id' | 'reported_user_id' | 'reason' | 'note' | 'message_id'>): Promise<UserReport>;
createUnlock(userId: bigint, destinationId: string): Promise<PlayerTravelUnlock>;
listUnlocks(userId: bigint): Promise<PlayerTravelUnlock[]>;
createNotification(input: Pick<SocialNotification, 'user_id' | 'category' | 'title' | 'content' | 'action_metadata' | 'expires_at'>): Promise<SocialNotification>;
listNotifications(userId: bigint, limit: number, before?: Date): Promise<SocialNotification[]>;
markNotificationRead(userId: bigint, id: bigint): Promise<SocialNotification | null>;
markAllNotificationsRead(userId: bigint): Promise<number>;
countUnreadNotifications(userId: bigint): Promise<number>;
cleanupExpired(now: Date): Promise<void>;
}