import { UserAccount } from '@/domain/aggregates/user-account/user-account.aggregate'; import { WalletAddress } from '@/domain/entities/wallet-address.entity'; import { UserId, AccountSequence, PhoneNumber, ReferralCode, ChainType, AccountStatus, KYCStatus, } from '@/domain/value-objects'; export interface Pagination { page: number; limit: number; } export interface ReferralLinkData { linkId: bigint; userId: bigint; referralCode: string; shortCode: string; channel: string | null; campaignId: string | null; createdAt: Date; } export interface CreateReferralLinkParams { userId: bigint; referralCode: string; shortCode: string; channel: string | null; campaignId: string | null; } export interface UserAccountRepository { save(account: UserAccount): Promise; saveWallets(userId: UserId, wallets: WalletAddress[]): Promise; findById(userId: UserId): Promise; findByAccountSequence(sequence: AccountSequence): Promise; findByDeviceId(deviceId: string): Promise; findByPhoneNumber(phoneNumber: PhoneNumber): Promise; findByReferralCode(referralCode: ReferralCode): Promise; findByWalletAddress(chainType: ChainType, address: string): Promise; getMaxAccountSequence(): Promise; getNextAccountSequence(): Promise; findUsers( filters?: { status?: AccountStatus; kycStatus?: KYCStatus; keyword?: string }, pagination?: Pagination, ): Promise; countUsers(filters?: { status?: AccountStatus; kycStatus?: KYCStatus }): Promise; // 推荐相关 findByInviterSequence(inviterSequence: AccountSequence): Promise; createReferralLink(params: CreateReferralLinkParams): Promise; findReferralLinksByUserId(userId: UserId): Promise; } export const USER_ACCOUNT_REPOSITORY = Symbol('USER_ACCOUNT_REPOSITORY');