UNPKG

@pisell/pisellos

Version:

一个可扩展的前端模块化SDK框架,支持插件系统

258 lines (257 loc) 8.26 kB
import { ProductsModule } from './modules/products'; import { MenuModule } from './modules/menu'; import { QuotationModule } from './modules/quotation'; import { ScheduleModuleEx } from './modules/schedule'; import { ResourceModule } from './modules/resource'; import { PisellCore, ServerModuleConfig, InitializeServerOptions } from '../types'; import type { RouteHandler, HttpMethod, RouteDefinition, Router, ModuleRegistryConfig, RequestSetting } from './types'; import { OrderModule } from './modules/order'; export type { RouteHandler, HttpMethod, RouteDefinition, Router, ModuleRegistryConfig, }; /** * Server 类 * 用于注册和管理服务端模块 */ declare class Server { private core; private app; private logger; products?: ProductsModule; menu?: MenuModule; quotation?: QuotationModule; schedule?: ScheduleModuleEx; resource?: ResourceModule; order?: OrderModule; router: Router; private productQuerySubscribers; private orderQuerySubscribers; private bookingQuerySubscribers; private moduleRegistry; constructor(core: PisellCore); /** * 注册路由 * @param routes 路由定义数组 */ private registerRoutes; /** * 注册单个模块并自动注册其路由 * @param module 模块实例 * @param options 模块配置 * @param moduleName 模块名称(用于日志) */ private registerModuleWithRoutes; /** * 根据模块名称注册单个模块 * @param moduleConfig 模块配置(可以是字符串或配置对象) */ private registerModuleByName; /** * 注册指定的服务端模块 * @param moduleConfigs 要注册的模块配置数组(模块名称或配置对象) */ registerModules(moduleConfigs?: (string | ServerModuleConfig)[]): Promise<{ module: any; config: ModuleRegistryConfig; shouldPreload: boolean; }[]>; /** * 预加载指定模块的数据 * @param registeredModules 已注册的模块信息 */ preloadModulesData(registeredModules: Array<{ module: any; config: ModuleRegistryConfig; shouldPreload: boolean; }>, options?: InitializeServerOptions): Promise<void>; /** * 初始化 Server(注册模块并预加载数据) * @param moduleConfigs 要注册的模块配置 * @param autoPreload 是否自动预加载数据 */ initialize(moduleConfigs?: (string | ServerModuleConfig)[], autoPreload?: boolean, options?: InitializeServerOptions): Promise<{ module: any; config: ModuleRegistryConfig; shouldPreload: boolean; }[]>; /** * 获取 Products 模块实例 */ getProducts(): ProductsModule | undefined; /** * 获取 Menu 模块实例 */ getMenu(): MenuModule | undefined; /** * 获取 Quotation 模块实例 */ getQuotation(): QuotationModule | undefined; /** * 获取 Schedule 模块实例 */ getSchedule(): ScheduleModuleEx | undefined; /** * 获取所有已注册的模块列表 */ getRegisteredModules(): string[]; /** * 后台静默刷新商品数据 * 重新拉取全量 SSE 接口,更新本地数据后触发 onProductsSyncCompleted * 不影响当前界面展示,适用于切回前台、定时刷新等场景 */ refreshProductsInBackground(): Promise<void>; /** * 清空所有server模块的IndexedDB缓存 * @returns Promise<void> */ clearAllIndexDB(): Promise<void>; /** * 获取所有注册的路由 */ getRoutes(): Router; /** * 根据方法和路径获取路由处理函数 * @param method HTTP 方法 * @param path 路径 */ getRouteHandler(method: HttpMethod, path: string): RouteHandler | undefined; /** * 检查路由是否存在 * @param method HTTP 方法 * @param path 路径 */ hasRoute(method: HttpMethod, path: string): boolean; /** * 执行路由处理函数 * @param method HTTP 方法 * @param path 路径 * @param params 请求参数 */ handleRoute(method: HttpMethod, path: string, params: { url: string; method: HttpMethod; data?: any; config?: RequestSetting; }): Promise<any>; /** * 获取所有路由列表(用于调试和文档) */ getAllRoutes(): Array<{ method: HttpMethod; path: string; }>; /** * 注册 Server 层的业务路由 * 这些路由需要编排多个模块的数据 * @private */ private registerServerRoutes; /** * 根据 subscriberId 移除商品查询订阅者 */ removeProductQuerySubscriber(subscriberId?: string): void; /** * 处理商品查询请求 * 存储订阅者信息,便于数据变更时推送最新结果 */ private handleProductQuery; /** * 取消商品查询订阅(HTTP 路由入口) */ private handleUnsubscribeProductQuery; /** * 处理订单列表查询 * 存储订阅者信息,本地计算结果;数据变更时通过 callback 推送 */ private handleOrderList; /** * 取消订单列表查询订阅(HTTP 路由入口) */ private handleUnsubscribeOrderQuery; /** * 判断预约查询的 sales_time_between 起始日期是否为今天 */ private isBookingQueryForToday; /** * 非今天的预约查询:通过真实 API 获取数据,再做 flattenOrdersToBookings 拆分 */ private fetchBookingListFromAPI; /** * 处理预约列表查询 * 今天:注册订阅者 + 本地数据筛选;非今天:清理订阅者 + 走真实 API */ private handleBookingList; /** * 处理资源列表查询 * 转发到资源模块去 */ private handleResourceList; /** * 取消预约列表查询订阅(HTTP 路由入口) */ private handleUnsubscribeBookingQuery; /** * 订单列表本地计算(编排 Order 模块) * filter 逻辑暂为 mock,仅记录参数 */ private computeOrderQueryResult; /** * 预约列表本地计算(编排 Order 模块) * 从订单中展开 bookings,再按条件筛选 + 分页 */ private computeBookingQueryResult; /** * 商品查询的核心计算逻辑(编排 Products、Menu、Schedule 模块) * 供 handleProductQuery 首次返回及 pubsub 变更推送复用 * @param context 查询上下文 * @param options 可选参数 * @param options.changedIds 变更的商品 IDs,用于增量更新价格缓存 */ private computeProductQueryResult; /** * 数据变更后,遍历所有订阅者重新计算查询结果并通过 callback 推送 * 由 ProductsModule 的 onProductsSyncCompleted 事件触发 * @param options 可选参数 * @param options.changedIds 变更的商品 IDs,用于增量更新价格缓存 */ private recomputeAndNotifyProductQuery; /** * 订单数据变更后,遍历订阅者重新计算并通过 callback 推送 */ private recomputeAndNotifyOrderQuery; /** * 预约数据变更后,遍历订阅者重新计算并通过 callback 推送 */ private recomputeAndNotifyBookingQuery; /** * 根据餐牌配置过滤商品 * @param products 所有商品列表 * @param activeMenuList 生效的餐牌列表 * @returns 过滤后的商品列表 * @private */ private filterProductsByMenuConfig; /** * 记录信息日志 * @param title 日志标题 * @param metadata 日志元数据 */ private logInfo; /** * 记录警告日志 * @param title 日志标题 * @param metadata 日志元数据 */ private logWarning; /** * 记录错误日志 * @param title 日志标题 * @param metadata 日志元数据 */ private logError; /** * 处理获取日程时间段点的请求 * 通过餐牌ID列表获取所有相关日程的时间段点 */ private handleGetScheduleTimePoints; } export default Server; export * from './modules';