feat(private-room): connect moments feed
Docker Image / Build and Push Docker Image (push) Successful in 9m29s

This commit is contained in:
2026-07-08 16:29:08 +08:00
parent 77b496da2b
commit c46b9b4cdd
41 changed files with 3107 additions and 281 deletions
+10
View File
@@ -14,6 +14,7 @@ export class ApiPath {
private static readonly _user = `${ApiPath._baseUrl}/user`;
private static readonly _payment = `${ApiPath._baseUrl}/payment`;
private static readonly _chat = `${ApiPath._baseUrl}/chat`;
private static readonly _privateRoom = `${ApiPath._baseUrl}/private-room`;
// ============ 认证相关 ============
/** 邮箱密码登录 */
@@ -73,6 +74,15 @@ export class ApiPath {
/** 一键解锁历史锁定消息 */
static readonly chatUnlockHistory = `${ApiPath._chat}/unlock-history`;
// ============ 私密空间相关 ============
/** 获取私密空间动态列表 */
static readonly privateRoomMoments = `${ApiPath._privateRoom}/moments`;
/** 解锁私密空间动态 */
static privateRoomMomentUnlock(momentId: string): string {
return `${ApiPath.privateRoomMoments}/${encodeURIComponent(momentId)}/unlock`;
}
// ============ 数据看板相关 ============
private static readonly _metrics = `${ApiPath._baseUrl}/metrics`;
+1
View File
@@ -9,5 +9,6 @@ export * from "./chat_api";
export * from "./http_client";
export * from "./metrics_api";
export * from "./payment_api";
export * from "./private_room_api";
export * from "./response_helper";
export * from "./user_api";
+49
View File
@@ -0,0 +1,49 @@
import {
PrivateRoomMomentsResponse,
PrivateRoomUnlockResponse,
UnlockPrivateRoomMomentRequest,
} from "@/data/dto/private-room";
import { ApiPath } from "./api_path";
import { httpClient } from "./http_client";
import { type ApiEnvelope, unwrap } from "./response_helper";
export interface GetPrivateRoomMomentsInput {
character?: string;
limit?: number;
cursor?: string | null;
}
export class PrivateRoomApi {
async getMoments(
input: GetPrivateRoomMomentsInput = {},
): Promise<PrivateRoomMomentsResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.privateRoomMoments,
{
query: {
character: input.character ?? "elio",
limit: input.limit ?? 20,
...(input.cursor ? { cursor: input.cursor } : {}),
},
},
);
return PrivateRoomMomentsResponse.fromJson(unwrap(env));
}
async unlockMoment(
momentId: string,
body: UnlockPrivateRoomMomentRequest,
): Promise<PrivateRoomUnlockResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.privateRoomMomentUnlock(momentId),
{
method: "POST",
body: body.toJson(),
},
);
return PrivateRoomUnlockResponse.fromJson(unwrap(env));
}
}
export const privateRoomApi = new PrivateRoomApi();