@pisell/pisellos
Version:
一个可扩展的前端模块化SDK框架,支持插件系统
258 lines (257 loc) • 8.26 kB
TypeScript
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';