54 lines
2.0 KiB
TypeScript
54 lines
2.0 KiB
TypeScript
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<void>;
|
|
saveWallets(userId: UserId, wallets: WalletAddress[]): Promise<void>;
|
|
findById(userId: UserId): Promise<UserAccount | null>;
|
|
findByAccountSequence(sequence: AccountSequence): Promise<UserAccount | null>;
|
|
findByDeviceId(deviceId: string): Promise<UserAccount | null>;
|
|
findByPhoneNumber(phoneNumber: PhoneNumber): Promise<UserAccount | null>;
|
|
findByReferralCode(referralCode: ReferralCode): Promise<UserAccount | null>;
|
|
findByWalletAddress(chainType: ChainType, address: string): Promise<UserAccount | null>;
|
|
getMaxAccountSequence(): Promise<AccountSequence | null>;
|
|
getNextAccountSequence(): Promise<AccountSequence>;
|
|
findUsers(
|
|
filters?: { status?: AccountStatus; kycStatus?: KYCStatus; keyword?: string },
|
|
pagination?: Pagination,
|
|
): Promise<UserAccount[]>;
|
|
countUsers(filters?: { status?: AccountStatus; kycStatus?: KYCStatus }): Promise<number>;
|
|
|
|
// 推荐相关
|
|
findByInviterSequence(inviterSequence: AccountSequence): Promise<UserAccount[]>;
|
|
createReferralLink(params: CreateReferralLinkParams): Promise<ReferralLinkData>;
|
|
findReferralLinksByUserId(userId: UserId): Promise<ReferralLinkData[]>;
|
|
}
|
|
|
|
export const USER_ACCOUNT_REPOSITORY = Symbol('USER_ACCOUNT_REPOSITORY');
|