refactor(api): remove unused network endpoints

This commit is contained in:
2026-07-07 16:29:21 +08:00
parent ab9b227969
commit b5bf81de59
47 changed files with 1 additions and 971 deletions
@@ -15,7 +15,6 @@ import { AppEnvUtil, deviceIdentifier, Result } from "@/utils";
* (这些路径返回 401 时不触发刷新) * (这些路径返回 401 时不触发刷新)
*/ */
const NO_AUTH_REFRESH_PATHS: readonly string[] = [ const NO_AUTH_REFRESH_PATHS: readonly string[] = [
ApiPath.sendCode,
ApiPath.emailLogin, ApiPath.emailLogin,
ApiPath.register, ApiPath.register,
ApiPath.guestLogin, ApiPath.guestLogin,
@@ -16,7 +16,6 @@ const log = new Logger("TokenInterceptor");
* 不需要 token 的路径 * 不需要 token 的路径
*/ */
const NO_TOKEN_PATHS: readonly string[] = [ const NO_TOKEN_PATHS: readonly string[] = [
ApiPath.sendCode,
ApiPath.emailLogin, ApiPath.emailLogin,
ApiPath.register, ApiPath.register,
ApiPath.guestLogin, ApiPath.guestLogin,
-32
View File
@@ -1,32 +0,0 @@
/**
* Apple 登录请求 DTO
*/
import {
AppleLoginRequestSchema,
type AppleLoginRequestInput,
type AppleLoginRequestData,
} from "@/data/schemas/auth/apple_login_request";
export class AppleLoginRequest {
declare readonly identityToken: string;
declare readonly platform: string;
declare readonly isTestAccount: boolean;
private constructor(input: AppleLoginRequestInput) {
const data = AppleLoginRequestSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: AppleLoginRequestInput): AppleLoginRequest {
return new AppleLoginRequest(input);
}
static fromJson(json: unknown): AppleLoginRequest {
return AppleLoginRequest.from(json as AppleLoginRequestInput);
}
toJson(): AppleLoginRequestData {
return AppleLoginRequestSchema.parse(this);
}
}
-2
View File
@@ -2,7 +2,6 @@
* @file Automatically generated by barrelsby. * @file Automatically generated by barrelsby.
*/ */
export * from "./apple_login_request";
export * from "./auth_mode"; export * from "./auth_mode";
export * from "./auth_panel_mode"; export * from "./auth_panel_mode";
export * from "./facebook_login_request"; export * from "./facebook_login_request";
@@ -18,4 +17,3 @@ export * from "./logout_response";
export * from "./refresh_token_request"; export * from "./refresh_token_request";
export * from "./refresh_token_response"; export * from "./refresh_token_response";
export * from "./register_request"; export * from "./register_request";
export * from "./send_code_request";
-30
View File
@@ -1,30 +0,0 @@
/**
* 发送验证码请求 DTO
*/
import {
SendCodeRequestSchema,
type SendCodeRequestInput,
type SendCodeRequestData,
} from "@/data/schemas/auth/send_code_request";
export class SendCodeRequest {
declare readonly email: string;
private constructor(input: SendCodeRequestInput) {
const data = SendCodeRequestSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: SendCodeRequestInput): SendCodeRequest {
return new SendCodeRequest(input);
}
static fromJson(json: unknown): SendCodeRequest {
return SendCodeRequest.from(json as SendCodeRequestInput);
}
toJson(): SendCodeRequestData {
return SendCodeRequestSchema.parse(this);
}
}
-31
View File
@@ -1,31 +0,0 @@
/**
* 消息同步响应 DTO
*/
import {
ChatSyncDataSchema,
type ChatSyncDataInput,
type ChatSyncDataData,
} from "@/data/schemas/chat/chat_sync_data";
export class ChatSyncData {
declare readonly syncedCount: number;
declare readonly totalHistory: number;
private constructor(input: ChatSyncDataInput) {
const data = ChatSyncDataSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: ChatSyncDataInput): ChatSyncData {
return new ChatSyncData(input);
}
static fromJson(json: unknown): ChatSyncData {
return ChatSyncData.from(json as ChatSyncDataInput);
}
toJson(): ChatSyncDataData {
return ChatSyncDataSchema.parse(this);
}
}
-34
View File
@@ -1,34 +0,0 @@
/**
* 消息同步请求 DTO
*/
import {
ChatSyncRequestSchema,
type ChatSyncRequestInput,
type ChatSyncRequestData,
} from "@/data/schemas/chat/chat_sync_request";
import { SyncMessage } from "./sync_message";
export class ChatSyncRequest {
declare readonly messages: SyncMessage[];
private constructor(input: ChatSyncRequestInput) {
const data = ChatSyncRequestSchema.parse(input);
Object.assign(this, {
...data,
messages: data.messages.map((m) => SyncMessage.from(m)),
});
Object.freeze(this);
}
static from(input: ChatSyncRequestInput): ChatSyncRequest {
return new ChatSyncRequest(input);
}
static fromJson(json: unknown): ChatSyncRequest {
return ChatSyncRequest.from(json as ChatSyncRequestInput);
}
toJson(): ChatSyncRequestData {
return ChatSyncRequestSchema.parse(this);
}
}
@@ -1,37 +0,0 @@
/**
* 图片上传响应 DTO
*/
import {
ImageUploadResponseSchema,
type ImageUploadResponseInput,
type ImageUploadResponseData,
} from "@/data/schemas/chat/image_upload_response";
export class ImageUploadResponse {
declare readonly success: boolean;
declare readonly imageId: string;
declare readonly thumbUrl: string;
declare readonly mediumUrl: string;
declare readonly originalUrl: string;
declare readonly width: number;
declare readonly height: number;
declare readonly bytes: number;
private constructor(input: ImageUploadResponseInput) {
const data = ImageUploadResponseSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: ImageUploadResponseInput): ImageUploadResponse {
return new ImageUploadResponse(input);
}
static fromJson(json: unknown): ImageUploadResponse {
return ImageUploadResponse.from(json as ImageUploadResponseInput);
}
toJson(): ImageUploadResponseData {
return ImageUploadResponseSchema.parse(this);
}
}
-5
View File
@@ -7,12 +7,7 @@ export * from "./chat_list_item";
export * from "./chat_media"; export * from "./chat_media";
export * from "./chat_message"; export * from "./chat_message";
export * from "./chat_send_response"; export * from "./chat_send_response";
export * from "./chat_sync_data";
export * from "./chat_sync_request";
export * from "./image_upload_response";
export * from "./send_message_request"; export * from "./send_message_request";
export * from "./stt_data";
export * from "./sync_message";
export * from "./ui_message"; export * from "./ui_message";
export * from "./unlock_history_response"; export * from "./unlock_history_response";
export * from "./unlock_private_request"; export * from "./unlock_private_request";
-30
View File
@@ -1,30 +0,0 @@
/**
* STT(语音转文字)响应 DTO
*/
import {
SttDataSchema,
type SttDataInput,
type SttDataData,
} from "@/data/schemas/chat/stt_data";
export class SttData {
declare readonly text: string;
private constructor(input: SttDataInput) {
const data = SttDataSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: SttDataInput): SttData {
return new SttData(input);
}
static fromJson(json: unknown): SttData {
return SttData.from(json as SttDataInput);
}
toJson(): SttDataData {
return SttDataSchema.parse(this);
}
}
-32
View File
@@ -1,32 +0,0 @@
/**
* 待同步的单条消息 DTO
*/
import {
SyncMessageSchema,
type SyncMessageInput,
type SyncMessageData,
} from "@/data/schemas/chat/sync_message";
export class SyncMessage {
declare readonly role: string;
declare readonly content: string;
declare readonly timestamp: string;
private constructor(input: SyncMessageInput) {
const data = SyncMessageSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: SyncMessageInput): SyncMessage {
return new SyncMessage(input);
}
static fromJson(json: unknown): SyncMessage {
return SyncMessage.from(json as SyncMessageInput);
}
toJson(): SyncMessageData {
return SyncMessageSchema.parse(this);
}
}
-1
View File
@@ -7,4 +7,3 @@ export * from "./create_payment_order_response";
export * from "./payment_order_status_response"; export * from "./payment_order_status_response";
export * from "./payment_plan"; export * from "./payment_plan";
export * from "./payment_plans_response"; export * from "./payment_plans_response";
export * from "./payment_vip_status_response";
@@ -1,33 +0,0 @@
/**
* VIP 状态响应 DTO
*/
import {
PaymentVipStatusResponseSchema,
type PaymentVipStatusResponseData,
type PaymentVipStatusResponseInput,
} from "@/data/schemas/payment/payment_vip_status_response";
export class PaymentVipStatusResponse {
declare readonly isVip: boolean;
declare readonly vipExpiresAt: string | null;
private constructor(input: PaymentVipStatusResponseInput) {
const data = PaymentVipStatusResponseSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: PaymentVipStatusResponseInput): PaymentVipStatusResponse {
return new PaymentVipStatusResponse(input);
}
static fromJson(json: unknown): PaymentVipStatusResponse {
return PaymentVipStatusResponse.from(
json as PaymentVipStatusResponseInput,
);
}
toJson(): PaymentVipStatusResponseData {
return PaymentVipStatusResponseSchema.parse(this);
}
}
-31
View File
@@ -1,31 +0,0 @@
/**
* 积分数据 DTO
*/
import {
CreditsDataSchema,
type CreditsDataInput,
type CreditsDataData,
} from "@/data/schemas/user/credits_data";
export class CreditsData {
declare readonly userId: string;
declare readonly dolBalance: number;
private constructor(input: CreditsDataInput) {
const data = CreditsDataSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: CreditsDataInput): CreditsData {
return new CreditsData(input);
}
static fromJson(json: unknown): CreditsData {
return CreditsData.from(json as CreditsDataInput);
}
toJson(): CreditsDataData {
return CreditsDataSchema.parse(this);
}
}
-33
View File
@@ -1,33 +0,0 @@
/**
* 积分历史记录 DTO
*/
import {
CreditsHistoryDataSchema,
type CreditsHistoryDataInput,
type CreditsHistoryDataData,
} from "@/data/schemas/user/credits_history_data";
export class CreditsHistoryData {
declare readonly records: Record<string, unknown>[];
declare readonly total: number;
declare readonly limit: number;
declare readonly offset: number;
private constructor(input: CreditsHistoryDataInput) {
const data = CreditsHistoryDataSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: CreditsHistoryDataInput): CreditsHistoryData {
return new CreditsHistoryData(input);
}
static fromJson(json: unknown): CreditsHistoryData {
return CreditsHistoryData.from(json as CreditsHistoryDataInput);
}
toJson(): CreditsHistoryDataData {
return CreditsHistoryDataSchema.parse(this);
}
}
-4
View File
@@ -3,12 +3,8 @@
*/ */
export * from "./avatar_data"; export * from "./avatar_data";
export * from "./credits_data";
export * from "./credits_history_data";
export * from "./personality_traits"; export * from "./personality_traits";
export * from "./recent_memory"; export * from "./recent_memory";
export * from "./update_profile_request";
export * from "./user"; export * from "./user";
export * from "./user_entitlements"; export * from "./user_entitlements";
export * from "./user_stats_response";
export * from "./user_view"; export * from "./user_view";
@@ -1,33 +0,0 @@
/**
* 更新个人资料请求 DTO
*/
import {
UpdateProfileRequestSchema,
type UpdateProfileRequestInput,
type UpdateProfileRequestData,
} from "@/data/schemas/user/update_profile_request";
export class UpdateProfileRequest {
declare readonly username: string;
declare readonly nickname: string;
declare readonly preferredLanguage: string;
declare readonly currentMood: string;
private constructor(input: UpdateProfileRequestInput) {
const data = UpdateProfileRequestSchema.parse(input);
Object.assign(this, data);
Object.freeze(this);
}
static from(input: UpdateProfileRequestInput): UpdateProfileRequest {
return new UpdateProfileRequest(input);
}
static fromJson(json: unknown): UpdateProfileRequest {
return UpdateProfileRequest.from(json as UpdateProfileRequestInput);
}
toJson(): UpdateProfileRequestData {
return UpdateProfileRequestSchema.parse(this);
}
}
-51
View File
@@ -1,51 +0,0 @@
/**
* 用户统计响应 DTO
*/
import {
UserStatsResponseSchema,
type UserStatsResponseInput,
type UserStatsResponseData,
} from "@/data/schemas/user/user_stats_response";
import { PersonalityTraits } from "./personality_traits";
import { RecentMemory } from "./recent_memory";
export class UserStatsResponse {
declare readonly userId: string;
declare readonly username: string;
declare readonly platform: string;
declare readonly intimacy: number;
declare readonly relationshipStage: string;
declare readonly dolBalance: number;
declare readonly totalMessages: number;
declare readonly lastMessageAt: string;
declare readonly accountCreatedAt: string;
declare readonly currentMood: string;
declare readonly personalityTraits: PersonalityTraits;
declare readonly recentMemories: RecentMemory[];
declare readonly promptTokensTotal: number;
declare readonly completionTokensTotal: number;
declare readonly cacheHitTokensTotal: number;
declare readonly tokensTotal: number;
private constructor(input: UserStatsResponseInput) {
const data = UserStatsResponseSchema.parse(input);
Object.assign(this, {
...data,
personalityTraits: PersonalityTraits.from(data.personalityTraits),
recentMemories: data.recentMemories.map((m) => RecentMemory.from(m)),
});
Object.freeze(this);
}
static from(input: UserStatsResponseInput): UserStatsResponse {
return new UserStatsResponse(input);
}
static fromJson(json: unknown): UserStatsResponse {
return UserStatsResponse.from(json as UserStatsResponseInput);
}
toJson(): UserStatsResponseData {
return UserStatsResponseSchema.parse(this);
}
}
-27
View File
@@ -3,7 +3,6 @@
import { ExceptionHandler } from "@/core/errors"; import { ExceptionHandler } from "@/core/errors";
import { ApiError, AuthApi, authApi, ErrorCode } from "@/data/services/api"; import { ApiError, AuthApi, authApi, ErrorCode } from "@/data/services/api";
import { import {
AppleLoginRequest,
FacebookLoginRequest, FacebookLoginRequest,
FbIdLoginRequest, FbIdLoginRequest,
GoogleLoginRequest, GoogleLoginRequest,
@@ -16,7 +15,6 @@ import {
RefreshTokenRequest, RefreshTokenRequest,
RefreshTokenResponse, RefreshTokenResponse,
RegisterRequest, RegisterRequest,
SendCodeRequest,
} from "@/data/dto/auth"; } from "@/data/dto/auth";
import { User } from "@/data/dto/user"; import { User } from "@/data/dto/user";
import { import {
@@ -94,13 +92,6 @@ export class AuthRepository implements IAuthRepository {
}); });
} }
/** 发送邮箱验证码。 */
async sendCode(email: string): Promise<Result<void>> {
return Result.wrap(async () => {
await this.api.sendCode(SendCodeRequest.from({ email }));
});
}
/** /**
* 退出真实用户登录并恢复游客态。 * 退出真实用户登录并恢复游客态。
* *
@@ -231,24 +222,6 @@ export class AuthRepository implements IAuthRepository {
); );
} }
/**
* Apple 登录。
* 注:Dart 端另有一个 `uploadFacebookAvatar` 方法,但当前 TS 端 `AuthApi`
* 尚未实现该端点,故仓库暂不暴露。等 `AuthApi` 补齐后再加。
*/
async appleLogin(identityToken: string): Promise<Result<LoginResponse>> {
return this._socialLogin(LoginStatus.Apple, () =>
this.api.appleLogin(
AppleLoginRequest.from(
withTestAccountFlag({
identityToken,
platform: getAuthPlatform(),
}),
),
),
);
}
/** /**
* 刷新 token:先读本地的 refresh token,空则直接返回错误; * 刷新 token:先读本地的 refresh token,空则直接返回错误;
* 调用 API 成功后写回新的 login token + refresh token。 * 调用 API 成功后写回新的 login token + refresh token。
@@ -38,9 +38,6 @@ export interface IAuthRepository {
guestId?: string; guestId?: string;
}): Promise<Result<LoginResponse>>; }): Promise<Result<LoginResponse>>;
/** 发送邮箱验证码。 */
sendCode(email: string): Promise<Result<void>>;
/** 退出真实用户登录并恢复游客态。 */ /** 退出真实用户登录并恢复游客态。 */
logout(): Promise<Result<void>>; logout(): Promise<Result<void>>;
@@ -65,9 +62,6 @@ export interface IAuthRepository {
avatarUrl?: string; avatarUrl?: string;
}): Promise<Result<LoginResponse>>; }): Promise<Result<LoginResponse>>;
/** Apple 登录。 */
appleLogin(identityToken: string): Promise<Result<LoginResponse>>;
/** 刷新 token:先读本地的 refresh token,空则返回错误。 */ /** 刷新 token:先读本地的 refresh token,空则返回错误。 */
refreshToken(): Promise<Result<RefreshTokenResponse>>; refreshToken(): Promise<Result<RefreshTokenResponse>>;
@@ -7,9 +7,7 @@ import type {
CreatePaymentOrderResponse, CreatePaymentOrderResponse,
PayChannel, PayChannel,
PaymentOrderStatusResponse, PaymentOrderStatusResponse,
PaymentPlan,
PaymentPlansResponse, PaymentPlansResponse,
PaymentVipStatusResponse,
} from "@/data/dto/payment"; } from "@/data/dto/payment";
import type { Result } from "@/utils/result"; import type { Result } from "@/utils/result";
@@ -23,12 +21,6 @@ export interface IPaymentRepository {
/** 清除本地缓存套餐列表。 */ /** 清除本地缓存套餐列表。 */
clearCachedPlans(): Promise<Result<void>>; clearCachedPlans(): Promise<Result<void>>;
/** 获取会员套餐列表。 */
getVipPlans(): Promise<Result<PaymentPlan[]>>;
/** 获取积分套餐列表。 */
getCreditPlans(): Promise<Result<PaymentPlan[]>>;
/** 创建支付订单。 */ /** 创建支付订单。 */
createOrder( createOrder(
planId: string, planId: string,
@@ -38,7 +30,4 @@ export interface IPaymentRepository {
/** 查询支付订单状态。 */ /** 查询支付订单状态。 */
getOrderStatus(orderId: string): Promise<Result<PaymentOrderStatusResponse>>; getOrderStatus(orderId: string): Promise<Result<PaymentOrderStatusResponse>>;
/** 查询当前用户 VIP 状态。 */
getVipStatus(): Promise<Result<PaymentVipStatusResponse>>;
} }
@@ -6,33 +6,14 @@
import type { Result } from "@/utils"; import type { Result } from "@/utils";
import type { import type {
CreditsData,
CreditsHistoryData,
UpdateProfileRequest,
User, User,
UserEntitlements, UserEntitlements,
UserStatsResponse,
} from "@/data/dto/user"; } from "@/data/dto/user";
export interface IUserRepository { export interface IUserRepository {
/** 获取用户统计信息。 */
getUserStats(): Promise<Result<UserStatsResponse>>;
/** 获取当前登录用户信息。 */ /** 获取当前登录用户信息。 */
getCurrentUser(): Promise<Result<User>>; getCurrentUser(): Promise<Result<User>>;
/** 更新个人资料。 */
updateProfile(request: UpdateProfileRequest): Promise<Result<User>>;
/** 查询积分余额。 */
getCredits(): Promise<Result<CreditsData>>;
/** 查询积分操作历史,分页参数默认 limit=50, offset=0。 */
getCreditsHistory(
limit?: number,
offset?: number,
): Promise<Result<CreditsHistoryData>>;
/** 获取当前用户权益快照。 */ /** 获取当前用户权益快照。 */
getEntitlements(): Promise<Result<UserEntitlements>>; getEntitlements(): Promise<Result<UserEntitlements>>;
} }
@@ -10,9 +10,7 @@ import {
CreatePaymentOrderResponse, CreatePaymentOrderResponse,
PayChannel, PayChannel,
PaymentOrderStatusResponse, PaymentOrderStatusResponse,
PaymentPlan,
PaymentPlansResponse, PaymentPlansResponse,
PaymentVipStatusResponse,
} from "@/data/dto/payment"; } from "@/data/dto/payment";
import { PaymentApi, paymentApi } from "@/data/services/api"; import { PaymentApi, paymentApi } from "@/data/services/api";
import { PaymentPlansStorage } from "@/data/storage/payment"; import { PaymentPlansStorage } from "@/data/storage/payment";
@@ -49,22 +47,6 @@ export class PaymentRepository implements IPaymentRepository {
}); });
} }
/** 获取会员套餐列表。 */
async getVipPlans(): Promise<Result<PaymentPlan[]>> {
return Result.wrap(async () => {
const response = await this.api.getPlans();
return response.plans.filter(isVipPaymentPlan);
});
}
/** 获取积分套餐列表。 */
async getCreditPlans(): Promise<Result<PaymentPlan[]>> {
return Result.wrap(async () => {
const response = await this.api.getPlans();
return response.plans.filter(isCreditPaymentPlan);
});
}
/** 创建支付订单。 */ /** 创建支付订单。 */
async createOrder( async createOrder(
planId: string, planId: string,
@@ -86,21 +68,9 @@ export class PaymentRepository implements IPaymentRepository {
return Result.wrap(() => this.api.getOrderStatus(orderId)); return Result.wrap(() => this.api.getOrderStatus(orderId));
} }
/** 查询当前用户 VIP 状态。 */
async getVipStatus(): Promise<Result<PaymentVipStatusResponse>> {
return Result.wrap(() => this.api.getVipStatus());
}
} }
/** 全局懒单例。 */ /** 全局懒单例。 */
export const getPaymentRepository = createLazySingleton<IPaymentRepository>( export const getPaymentRepository = createLazySingleton<IPaymentRepository>(
() => new PaymentRepository(paymentApi), () => new PaymentRepository(paymentApi),
); );
export function isVipPaymentPlan(plan: PaymentPlan): boolean {
return plan.vipDays !== null;
}
export function isCreditPaymentPlan(plan: PaymentPlan): boolean {
return plan.dolAmount !== null;
}
-27
View File
@@ -1,12 +1,8 @@
"use client"; "use client";
import { UserApi, userApi } from "@/data/services/api"; import { UserApi, userApi } from "@/data/services/api";
import { import {
CreditsData,
CreditsHistoryData,
UpdateProfileRequest,
User, User,
UserEntitlements, UserEntitlements,
UserStatsResponse,
} from "@/data/dto/user"; } from "@/data/dto/user";
import { Result } from "@/utils"; import { Result } from "@/utils";
import type { IUserRepository } from "@/data/repositories/interfaces"; import type { IUserRepository } from "@/data/repositories/interfaces";
@@ -15,34 +11,11 @@ import { createLazySingleton } from "./lazy_singleton";
export class UserRepository implements IUserRepository { export class UserRepository implements IUserRepository {
constructor(private readonly api: UserApi) {} constructor(private readonly api: UserApi) {}
/** 获取用户统计信息。 */
async getUserStats(): Promise<Result<UserStatsResponse>> {
return Result.wrap(() => this.api.getUserStats());
}
/** 获取当前登录用户信息。 */ /** 获取当前登录用户信息。 */
async getCurrentUser(): Promise<Result<User>> { async getCurrentUser(): Promise<Result<User>> {
return Result.wrap(() => this.api.getCurrentUser()); return Result.wrap(() => this.api.getCurrentUser());
} }
/** 更新个人资料。 */
async updateProfile(request: UpdateProfileRequest): Promise<Result<User>> {
return Result.wrap(() => this.api.updateProfile(request));
}
/** 查询积分余额。 */
async getCredits(): Promise<Result<CreditsData>> {
return Result.wrap(() => this.api.getCredits());
}
/** 查询积分操作历史,分页参数默认 limit=50, offset=0。 */
async getCreditsHistory(
limit = 50,
offset = 0,
): Promise<Result<CreditsHistoryData>> {
return Result.wrap(() => this.api.getCreditsHistory(limit, offset));
}
/** 获取当前用户权益快照。 */ /** 获取当前用户权益快照。 */
async getEntitlements(): Promise<Result<UserEntitlements>> { async getEntitlements(): Promise<Result<UserEntitlements>> {
return Result.wrap(() => this.api.getEntitlements()); return Result.wrap(() => this.api.getEntitlements());
@@ -1,16 +0,0 @@
/**
* Apple 登录请求
*
*/
import { z } from "zod";
import { booleanOrFalse } from "../nullable-defaults";
export const AppleLoginRequestSchema = z.object({
identityToken: z.string(),
platform: z.string(),
isTestAccount: booleanOrFalse,
});
export type AppleLoginRequestInput = z.input<typeof AppleLoginRequestSchema>;
export type AppleLoginRequestData = z.output<typeof AppleLoginRequestSchema>;
-2
View File
@@ -2,7 +2,6 @@
* @file Automatically generated by barrelsby. * @file Automatically generated by barrelsby.
*/ */
export * from "./apple_login_request";
export * from "./facebook_login_request"; export * from "./facebook_login_request";
export * from "./facebook_user_data"; export * from "./facebook_user_data";
export * from "./fb_id_login_request"; export * from "./fb_id_login_request";
@@ -15,4 +14,3 @@ export * from "./logout_response";
export * from "./refresh_token_request"; export * from "./refresh_token_request";
export * from "./refresh_token_response"; export * from "./refresh_token_response";
export * from "./register_request"; export * from "./register_request";
export * from "./send_code_request";
@@ -1,12 +0,0 @@
/**
* 发送验证码请求
*
*/
import { z } from "zod";
export const SendCodeRequestSchema = z.object({
email: z.string(),
});
export type SendCodeRequestInput = z.input<typeof SendCodeRequestSchema>;
export type SendCodeRequestData = z.output<typeof SendCodeRequestSchema>;
-15
View File
@@ -1,15 +0,0 @@
/**
* 消息同步响应
*
*/
import { z } from "zod";
import { numberOrZero } from "../nullable-defaults";
export const ChatSyncDataSchema = z.object({
syncedCount: numberOrZero,
totalHistory: numberOrZero,
});
export type ChatSyncDataInput = z.input<typeof ChatSyncDataSchema>;
export type ChatSyncDataData = z.output<typeof ChatSyncDataSchema>;
@@ -1,13 +0,0 @@
/**
* 消息同步请求
*
*/
import { z } from "zod";
import { SyncMessageSchema } from "./sync_message";
export const ChatSyncRequestSchema = z.object({
messages: z.array(SyncMessageSchema),
});
export type ChatSyncRequestInput = z.input<typeof ChatSyncRequestSchema>;
export type ChatSyncRequestData = z.output<typeof ChatSyncRequestSchema>;
@@ -1,21 +0,0 @@
/**
* 图片上传响应
*
*/
import { z } from "zod";
import { booleanOrTrue, numberOrZero, stringOrEmpty } from "../nullable-defaults";
export const ImageUploadResponseSchema = z.object({
success: booleanOrTrue,
imageId: stringOrEmpty,
thumbUrl: stringOrEmpty,
mediumUrl: stringOrEmpty,
originalUrl: stringOrEmpty,
width: numberOrZero,
height: numberOrZero,
bytes: numberOrZero,
});
export type ImageUploadResponseInput = z.input<typeof ImageUploadResponseSchema>;
export type ImageUploadResponseData = z.output<typeof ImageUploadResponseSchema>;
-5
View File
@@ -6,12 +6,7 @@ export * from "./chat_history_response";
export * from "./chat_message"; export * from "./chat_message";
export * from "./chat_payloads"; export * from "./chat_payloads";
export * from "./chat_send_response"; export * from "./chat_send_response";
export * from "./chat_sync_data";
export * from "./chat_sync_request";
export * from "./image_upload_response";
export * from "./send_message_request"; export * from "./send_message_request";
export * from "./stt_data";
export * from "./sync_message";
export * from "./unlock_history_response"; export * from "./unlock_history_response";
export * from "./unlock_private_request"; export * from "./unlock_private_request";
export * from "./unlock_private_response"; export * from "./unlock_private_response";
-14
View File
@@ -1,14 +0,0 @@
/**
* STT(语音转文字)响应
*
*/
import { z } from "zod";
import { stringOrEmpty } from "../nullable-defaults";
export const SttDataSchema = z.object({
text: stringOrEmpty,
});
export type SttDataInput = z.input<typeof SttDataSchema>;
export type SttDataData = z.output<typeof SttDataSchema>;
-16
View File
@@ -1,16 +0,0 @@
/**
* 待同步的单条消息
*
*/
import { z } from "zod";
import { stringOrEmpty } from "../nullable-defaults";
export const SyncMessageSchema = z.object({
role: stringOrEmpty,
content: stringOrEmpty,
timestamp: stringOrEmpty,
});
export type SyncMessageInput = z.input<typeof SyncMessageSchema>;
export type SyncMessageData = z.output<typeof SyncMessageSchema>;
-1
View File
@@ -7,4 +7,3 @@ export * from "./create_payment_order_response";
export * from "./payment_order_status_response"; export * from "./payment_order_status_response";
export * from "./payment_plan"; export * from "./payment_plan";
export * from "./payment_plans_response"; export * from "./payment_plans_response";
export * from "./payment_vip_status_response";
@@ -1,18 +0,0 @@
/**
* VIP 状态响应
*/
import { z } from "zod";
import { booleanOrFalse, stringOrNull } from "../nullable-defaults";
export const PaymentVipStatusResponseSchema = z.object({
isVip: booleanOrFalse,
vipExpiresAt: stringOrNull,
});
export type PaymentVipStatusResponseInput = z.input<
typeof PaymentVipStatusResponseSchema
>;
export type PaymentVipStatusResponseData = z.output<
typeof PaymentVipStatusResponseSchema
>;
-15
View File
@@ -1,15 +0,0 @@
/**
* 积分数据模型
*
*/
import { z } from "zod";
import { numberOrZero, stringOrEmpty } from "../nullable-defaults";
export const CreditsDataSchema = z.object({
userId: stringOrEmpty,
dolBalance: numberOrZero,
});
export type CreditsDataInput = z.input<typeof CreditsDataSchema>;
export type CreditsDataData = z.output<typeof CreditsDataSchema>;
@@ -1,17 +0,0 @@
/**
* 积分历史记录模型
*
*/
import { z } from "zod";
import { arrayOrEmpty, numberOrZero } from "../nullable-defaults";
export const CreditsHistoryDataSchema = z.object({
records: arrayOrEmpty(z.record(z.string(), z.unknown())),
total: numberOrZero,
limit: numberOrZero,
offset: numberOrZero,
});
export type CreditsHistoryDataInput = z.input<typeof CreditsHistoryDataSchema>;
export type CreditsHistoryDataData = z.output<typeof CreditsHistoryDataSchema>;
-4
View File
@@ -3,13 +3,9 @@
*/ */
export * from "./avatar_data"; export * from "./avatar_data";
export * from "./credits_data";
export * from "./credits_history_data";
export * from "./persisted_user"; export * from "./persisted_user";
export * from "./personality_traits"; export * from "./personality_traits";
export * from "./recent_memory"; export * from "./recent_memory";
export * from "./update_profile_request";
export * from "./user"; export * from "./user";
export * from "./user_entitlement_snapshot"; export * from "./user_entitlement_snapshot";
export * from "./user_entitlements"; export * from "./user_entitlements";
export * from "./user_stats_response";
@@ -1,17 +0,0 @@
/**
* 更新个人资料请求
*
*/
import { z } from "zod";
import { stringOrEmpty } from "../nullable-defaults";
export const UpdateProfileRequestSchema = z.object({
username: stringOrEmpty,
nickname: stringOrEmpty,
preferredLanguage: stringOrEmpty,
currentMood: stringOrEmpty,
});
export type UpdateProfileRequestInput = z.input<typeof UpdateProfileRequestSchema>;
export type UpdateProfileRequestData = z.output<typeof UpdateProfileRequestSchema>;
@@ -1,36 +0,0 @@
/**
* 用户统计响应
*
*/
import { z } from "zod";
import {
arrayOrEmpty,
numberOrZero,
schemaOr,
stringOrEmpty,
} from "../nullable-defaults";
import { PersonalityTraitsSchema, PERSONALITY_TRAITS_DEFAULTS } from "./personality_traits";
import { RecentMemorySchema } from "./recent_memory";
export const UserStatsResponseSchema = z.object({
userId: stringOrEmpty,
username: stringOrEmpty,
platform: stringOrEmpty,
intimacy: numberOrZero,
relationshipStage: stringOrEmpty,
dolBalance: numberOrZero,
totalMessages: numberOrZero,
lastMessageAt: stringOrEmpty,
accountCreatedAt: stringOrEmpty,
currentMood: stringOrEmpty,
personalityTraits: schemaOr(PersonalityTraitsSchema, PERSONALITY_TRAITS_DEFAULTS),
recentMemories: arrayOrEmpty(RecentMemorySchema),
promptTokensTotal: numberOrZero,
completionTokensTotal: numberOrZero,
cacheHitTokensTotal: numberOrZero,
tokensTotal: numberOrZero,
});
export type UserStatsResponseInput = z.input<typeof UserStatsResponseSchema>;
export type UserStatsResponseData = z.output<typeof UserStatsResponseSchema>;
-45
View File
@@ -11,15 +11,11 @@ export class ApiPath {
// ============ 功能模块分组 ============ // ============ 功能模块分组 ============
private static readonly _auth = `${ApiPath._baseUrl}/auth`; private static readonly _auth = `${ApiPath._baseUrl}/auth`;
private static readonly _verify = `${ApiPath._baseUrl}/verify`;
private static readonly _user = `${ApiPath._baseUrl}/user`; private static readonly _user = `${ApiPath._baseUrl}/user`;
private static readonly _payment = `${ApiPath._baseUrl}/payment`; private static readonly _payment = `${ApiPath._baseUrl}/payment`;
private static readonly _chat = `${ApiPath._baseUrl}/chat`; private static readonly _chat = `${ApiPath._baseUrl}/chat`;
// ============ 认证相关 ============ // ============ 认证相关 ============
/** 发送验证码 */
static readonly sendCode = `${ApiPath._verify}/send`;
/** 邮箱密码登录 */ /** 邮箱密码登录 */
static readonly emailLogin = `${ApiPath._auth}/login`; static readonly emailLogin = `${ApiPath._auth}/login`;
@@ -29,9 +25,6 @@ export class ApiPath {
/** 设备自动登录 */ /** 设备自动登录 */
static readonly guestLogin = `${ApiPath._auth}/guest`; static readonly guestLogin = `${ApiPath._auth}/guest`;
/** Apple 登录 */
static readonly appleLogin = `${ApiPath._auth}/login/apple`;
/** Google 登录 */ /** Google 登录 */
static readonly googleLogin = `${ApiPath._auth}/login/google`; static readonly googleLogin = `${ApiPath._auth}/login/google`;
@@ -51,24 +44,9 @@ export class ApiPath {
static readonly getCurrentUser = `${ApiPath._auth}/me`; static readonly getCurrentUser = `${ApiPath._auth}/me`;
// ============ 用户相关 ============ // ============ 用户相关 ============
/** 获取用户统计信息 */
static readonly userStats = `${ApiPath._user}/stats`;
/** 获取个人信息(与 /auth/me 等价) */ /** 获取个人信息(与 /auth/me 等价) */
static readonly userProfile = `${ApiPath._user}/profile`; static readonly userProfile = `${ApiPath._user}/profile`;
/** 更新个人信息 */
static readonly updateProfile = `${ApiPath._user}/profile`;
/** 上传头像 */
static readonly userAvatar = `${ApiPath._user}/avatar`;
/** 查询积分余额 */
static readonly userCredits = `${ApiPath._user}/credits`;
/** 查询积分操作历史 */
static readonly userCreditsHistory = `${ApiPath._user}/credits/history`;
/** 获取当前用户权益快照 */ /** 获取当前用户权益快照 */
static readonly userEntitlements = `${ApiPath._user}/entitlements`; static readonly userEntitlements = `${ApiPath._user}/entitlements`;
@@ -82,20 +60,6 @@ export class ApiPath {
/** 获取商品套餐列表 */ /** 获取商品套餐列表 */
static readonly paymentPlans = `${ApiPath._payment}/plans`; static readonly paymentPlans = `${ApiPath._payment}/plans`;
/** 查询当前用户 VIP 状态 */
static readonly paymentVipStatus = `${ApiPath._payment}/vip-status`;
/** @deprecated PAYWALL_API 使用 paymentPlans。 */
static readonly paymentProducts = ApiPath.paymentPlans;
/** 申请退款 */
static readonly paymentRefund = `${ApiPath._payment}/refund`;
/** 获取商品详情路径 */
static getPaymentProductDetail(productId: string): string {
return `${ApiPath.paymentProducts}/${productId}`;
}
// ============ 聊天相关 ============ // ============ 聊天相关 ============
/** 发送消息 */ /** 发送消息 */
static readonly chatSend = `${ApiPath._chat}/send`; static readonly chatSend = `${ApiPath._chat}/send`;
@@ -103,15 +67,6 @@ export class ApiPath {
/** 获取聊天历史 */ /** 获取聊天历史 */
static readonly chatHistory = `${ApiPath._chat}/history`; static readonly chatHistory = `${ApiPath._chat}/history`;
/** 语音转文字(STT */
static readonly chatStt = `${ApiPath._chat}/stt`;
/** 同步游客消息 */
static readonly chatSync = `${ApiPath._chat}/sync`;
/** 上传图片 */
static readonly chatUploadImage = `${ApiPath._chat}/upload-image`;
/** 解锁私密消息 */ /** 解锁私密消息 */
static readonly chatUnlockPrivate = `${ApiPath._chat}/unlock-private`; static readonly chatUnlockPrivate = `${ApiPath._chat}/unlock-private`;
+1 -24
View File
@@ -10,7 +10,6 @@ import { httpClient } from "./http_client";
import { ApiPath } from "./api_path"; import { ApiPath } from "./api_path";
import { ApiEnvelope, unwrap } from "./response_helper"; import { ApiEnvelope, unwrap } from "./response_helper";
import { import {
AppleLoginRequest,
FacebookLoginRequest, FacebookLoginRequest,
FbIdLoginRequest, FbIdLoginRequest,
GoogleLoginRequest, GoogleLoginRequest,
@@ -21,7 +20,6 @@ import {
RefreshTokenRequest, RefreshTokenRequest,
RefreshTokenResponse, RefreshTokenResponse,
RegisterRequest, RegisterRequest,
SendCodeRequest,
} from "@/data/dto/auth"; } from "@/data/dto/auth";
import { User } from "@/data/dto/user"; import { User } from "@/data/dto/user";
import type { UserData } from "@/data/schemas/user/user"; import type { UserData } from "@/data/schemas/user/user";
@@ -30,16 +28,6 @@ import { Logger } from "@/utils";
const log = new Logger("DataServicesApiAuthApi"); const log = new Logger("DataServicesApiAuthApi");
export class AuthApi { export class AuthApi {
/**
* 发送验证码
*/
async sendCode(body: SendCodeRequest): Promise<void> {
await httpClient<ApiEnvelope<unknown>>(ApiPath.sendCode, {
method: "POST",
body: body.toJson(),
});
}
/** /**
* 邮箱密码登录 * 邮箱密码登录
*/ */
@@ -61,17 +49,6 @@ export class AuthApi {
}); });
} }
/**
* Apple 登录
*/
async appleLogin(body: AppleLoginRequest): Promise<LoginResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(ApiPath.appleLogin, {
method: "POST",
body: body.toJson(),
});
return LoginResponse.fromJson(unwrap(env) as Record<string, unknown>);
}
/** /**
* Google 登录 * Google 登录
*/ */
@@ -112,7 +89,7 @@ export class AuthApi {
* 不要再用 `unwrap` + `LogoutResponse.fromJson` 解析 —— Zod schema 是 z.object * 不要再用 `unwrap` + `LogoutResponse.fromJson` 解析 —— Zod schema 是 z.object
* 对 null 会抛 ZodError "Invalid input: expected object, received null"。 * 对 null 会抛 ZodError "Invalid input: expected object, received null"。
* *
* 对齐 `register` / `sendCode` 的写法:调通就完事,不解析响应体。 * 对齐 `register` 的写法:调通就完事,不解析响应体。
*/ */
async logout(): Promise<void> { async logout(): Promise<void> {
await httpClient<ApiEnvelope<unknown>>(ApiPath.logout, { await httpClient<ApiEnvelope<unknown>>(ApiPath.logout, {
-45
View File
@@ -10,12 +10,7 @@ import { ApiEnvelope, unwrap } from "./response_helper";
import { import {
ChatHistoryResponse, ChatHistoryResponse,
ChatSendResponse, ChatSendResponse,
ChatSyncData,
ChatSyncRequest,
ImageUploadResponse,
SendMessageRequest, SendMessageRequest,
SttData,
SyncMessage,
UnlockHistoryResponse, UnlockHistoryResponse,
UnlockPrivateRequest, UnlockPrivateRequest,
UnlockPrivateResponse, UnlockPrivateResponse,
@@ -45,46 +40,6 @@ export class ChatApi {
); );
} }
/**
* 语音转文字(multipart 上传)
*/
async speechToText(audio: Blob | File): Promise<SttData> {
const formData = new FormData();
formData.append("audio", audio);
const env = await httpClient<ApiEnvelope<unknown>>(ApiPath.chatStt, {
method: "POST",
body: formData,
});
return SttData.fromJson(unwrap(env) as Record<string, unknown>);
}
/**
* 同步游客消息
*/
async syncMessages(messages: SyncMessage[]): Promise<ChatSyncData> {
const body = ChatSyncRequest.from({ messages });
const env = await httpClient<ApiEnvelope<unknown>>(ApiPath.chatSync, {
method: "POST",
body: body.toJson(),
});
return ChatSyncData.fromJson(unwrap(env) as Record<string, unknown>);
}
/**
* 上传图片
*/
async uploadImage(image: Blob | File): Promise<ImageUploadResponse> {
const formData = new FormData();
formData.append("image", image);
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.chatUploadImage,
{ method: "POST", body: formData }
);
return ImageUploadResponse.fromJson(
unwrap(env) as Record<string, unknown>
);
}
/** /**
* 解锁单条历史付费 / 私密消息 * 解锁单条历史付费 / 私密消息
*/ */
-12
View File
@@ -8,7 +8,6 @@ import {
CreatePaymentOrderResponse, CreatePaymentOrderResponse,
PaymentOrderStatusResponse, PaymentOrderStatusResponse,
PaymentPlansResponse, PaymentPlansResponse,
PaymentVipStatusResponse,
} from "@/data/dto/payment"; } from "@/data/dto/payment";
import { ApiPath } from "./api_path"; import { ApiPath } from "./api_path";
@@ -61,17 +60,6 @@ export class PaymentApi {
); );
} }
/**
* 查询当前用户 VIP 状态
*/
async getVipStatus(): Promise<PaymentVipStatusResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.paymentVipStatus,
);
return PaymentVipStatusResponse.fromJson(
unwrap(env) as Record<string, unknown>,
);
}
} }
/** /**
-49
View File
@@ -8,26 +8,12 @@ import { httpClient } from "./http_client";
import { ApiPath } from "./api_path"; import { ApiPath } from "./api_path";
import { ApiEnvelope, unwrap } from "./response_helper"; import { ApiEnvelope, unwrap } from "./response_helper";
import { import {
CreditsData,
CreditsHistoryData,
UpdateProfileRequest,
User, User,
UserEntitlements, UserEntitlements,
UserStatsResponse,
} from "@/data/dto/user"; } from "@/data/dto/user";
import type { UserData } from "@/data/schemas/user/user"; import type { UserData } from "@/data/schemas/user/user";
export class UserApi { export class UserApi {
/**
* 获取用户统计信息
*/
async getUserStats(): Promise<UserStatsResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(ApiPath.userStats);
return UserStatsResponse.fromJson(
unwrap(env) as Record<string, unknown>
);
}
/** /**
* 获取个人信息 * 获取个人信息
*/ */
@@ -36,41 +22,6 @@ export class UserApi {
return User.fromJson(unwrap(env) as UserData); return User.fromJson(unwrap(env) as UserData);
} }
/**
* 更新个人资料
*/
async updateProfile(body: UpdateProfileRequest): Promise<User> {
const env = await httpClient<ApiEnvelope<unknown>>(ApiPath.updateProfile, {
method: "PUT",
body: body.toJson(),
});
return User.fromJson(unwrap(env) as UserData);
}
/**
* 查询积分余额
*/
async getCredits(): Promise<CreditsData> {
const env = await httpClient<ApiEnvelope<unknown>>(ApiPath.userCredits);
return CreditsData.fromJson(unwrap(env) as Record<string, unknown>);
}
/**
* 查询积分操作历史
*/
async getCreditsHistory(
limit = 50,
offset = 0
): Promise<CreditsHistoryData> {
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.userCreditsHistory,
{ query: { limit, offset } }
);
return CreditsHistoryData.fromJson(
unwrap(env) as Record<string, unknown>
);
}
/** /**
* 获取当前用户权益快照 * 获取当前用户权益快照
*/ */
-22
View File
@@ -16,7 +16,6 @@ export * from "../../core/net/interceptor/auth_refresh_interceptor";
export * from "../../core/net/interceptor/logging_interceptor"; export * from "../../core/net/interceptor/logging_interceptor";
export * from "../../core/net/interceptor/token_interceptor"; export * from "../../core/net/interceptor/token_interceptor";
// 注:原 ./auth/* 平台适配层已删除(社交登录改由 NextAuth 处理) // 注:原 ./auth/* 平台适配层已删除(社交登录改由 NextAuth 处理)
export * from "../dto/auth/apple_login_request";
export * from "../dto/auth/facebook_login_request"; export * from "../dto/auth/facebook_login_request";
export * from "../dto/auth/facebook_user_data"; export * from "../dto/auth/facebook_user_data";
export * from "../dto/auth/fb_id_login_request"; export * from "../dto/auth/fb_id_login_request";
@@ -29,27 +28,16 @@ export * from "../dto/auth/logout_response";
export * from "../dto/auth/refresh_token_request"; export * from "../dto/auth/refresh_token_request";
export * from "../dto/auth/refresh_token_response"; export * from "../dto/auth/refresh_token_response";
export * from "../dto/auth/register_request"; export * from "../dto/auth/register_request";
export * from "../dto/auth/send_code_request";
export * from "../dto/chat/chat_history_response"; export * from "../dto/chat/chat_history_response";
export * from "../dto/chat/chat_message"; export * from "../dto/chat/chat_message";
export * from "../dto/chat/chat_send_response"; export * from "../dto/chat/chat_send_response";
export * from "../dto/chat/chat_sync_data";
export * from "../dto/chat/chat_sync_request";
export * from "../dto/chat/image_upload_response";
export * from "../dto/chat/send_message_request"; export * from "../dto/chat/send_message_request";
export * from "../dto/chat/stt_data";
export * from "../dto/chat/sync_message";
export * from "../dto/metrics/app_event"; export * from "../dto/metrics/app_event";
export * from "../dto/metrics/pwa_event"; export * from "../dto/metrics/pwa_event";
export * from "../dto/user/avatar_data"; export * from "../dto/user/avatar_data";
export * from "../dto/user/credits_data";
export * from "../dto/user/credits_history_data";
export * from "../dto/user/personality_traits"; export * from "../dto/user/personality_traits";
export * from "../dto/user/recent_memory"; export * from "../dto/user/recent_memory";
export * from "../dto/user/update_profile_request";
export * from "../dto/user/user"; export * from "../dto/user/user";
export * from "../dto/user/user_stats_response";
export * from "../schemas/auth/apple_login_request";
export * from "../schemas/auth/facebook_login_request"; export * from "../schemas/auth/facebook_login_request";
export * from "../schemas/auth/facebook_user_data"; export * from "../schemas/auth/facebook_user_data";
export * from "../schemas/auth/fb_id_login_request"; export * from "../schemas/auth/fb_id_login_request";
@@ -62,23 +50,13 @@ export * from "../schemas/auth/logout_response";
export * from "../schemas/auth/refresh_token_request"; export * from "../schemas/auth/refresh_token_request";
export * from "../schemas/auth/refresh_token_response"; export * from "../schemas/auth/refresh_token_response";
export * from "../schemas/auth/register_request"; export * from "../schemas/auth/register_request";
export * from "../schemas/auth/send_code_request";
export * from "../schemas/chat/chat_history_response"; export * from "../schemas/chat/chat_history_response";
export * from "../schemas/chat/chat_message"; export * from "../schemas/chat/chat_message";
export * from "../schemas/chat/chat_send_response"; export * from "../schemas/chat/chat_send_response";
export * from "../schemas/chat/chat_sync_data";
export * from "../schemas/chat/chat_sync_request";
export * from "../schemas/chat/image_upload_response";
export * from "../schemas/chat/send_message_request"; export * from "../schemas/chat/send_message_request";
export * from "../schemas/chat/stt_data";
export * from "../schemas/chat/sync_message";
export * from "../schemas/metrics/app_event"; export * from "../schemas/metrics/app_event";
export * from "../schemas/metrics/pwa_event"; export * from "../schemas/metrics/pwa_event";
export * from "../schemas/user/avatar_data"; export * from "../schemas/user/avatar_data";
export * from "../schemas/user/credits_data";
export * from "../schemas/user/credits_history_data";
export * from "../schemas/user/personality_traits"; export * from "../schemas/user/personality_traits";
export * from "../schemas/user/recent_memory"; export * from "../schemas/user/recent_memory";
export * from "../schemas/user/update_profile_request";
export * from "../schemas/user/user"; export * from "../schemas/user/user";
export * from "../schemas/user/user_stats_response";
-11
View File
@@ -1,11 +0,0 @@
"use client";
import type { PaymentVipStatusResponse } from "@/data/dto/payment";
import { getPaymentRepository } from "@/data/repositories/payment_repository";
import type { Result } from "@/utils";
export function getCurrentVipPaymentStatus(): Promise<
Result<PaymentVipStatusResponse>
> {
return getPaymentRepository().getVipStatus();
}