40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
// MsgClient 接口 + DI token(B8 裁决:DownstreamClient 抽象)
|
||
// 接口定义所有 P5+ 需要的 msg RPC,实现分 gRPC + mock 两种
|
||
// 选择策略:TEACHER_BFF_DEV_MODE=true → mock,false → gRPC
|
||
import type { CallContext } from "../types.js";
|
||
import type {
|
||
ListNotificationsRequest,
|
||
ListNotificationsResponse,
|
||
SearchNotificationsRequest,
|
||
SearchNotificationsResponse,
|
||
MarkAsReadRequest,
|
||
MarkAsReadResponse,
|
||
} from "./msg.types.js";
|
||
|
||
/** MsgClient DI token(NestJS 注入用) */
|
||
export const MSG_CLIENT = Symbol("MSG_CLIENT");
|
||
|
||
/** MsgClient 接口(所有 BFF 统一依赖此接口,不依赖具体实现) */
|
||
export interface MsgClient {
|
||
// ===== NotificationService =====
|
||
listNotifications(
|
||
ctx: CallContext,
|
||
req: ListNotificationsRequest,
|
||
): Promise<ListNotificationsResponse>;
|
||
searchNotifications(
|
||
ctx: CallContext,
|
||
req: SearchNotificationsRequest,
|
||
): Promise<SearchNotificationsResponse>;
|
||
markAsRead(
|
||
ctx: CallContext,
|
||
req: MarkAsReadRequest,
|
||
): Promise<MarkAsReadResponse>;
|
||
|
||
// ===== 健康检查 =====
|
||
checkHealth(): Promise<{
|
||
serving: boolean;
|
||
latencyMs: number;
|
||
error?: string;
|
||
}>;
|
||
}
|