import type { LoggerFriendly, LoggerFriendlyOptions } from "#Source/log/index.ts" import { Logger } from "#Source/log/index.ts" import type { ApiCore } from "./api-core.ts" export interface ResultOptions<_T> extends LoggerFriendlyOptions {} /** * @description {@link Api} 的处理器无法获得 Request 和 Response 对象,它不应该直接返回数据给前端,而应该通过 * {@link SuccessResult} 或 {@link ErrorResult} 定义自己想要返回什么,然后 {@link ApiServer} 会 * 负责执行返回逻辑,将结果返回给前端,这样做既可以使 Api 的核心逻辑更纯粹,也可以保证所有的接口始终 * 给前端返回一致的数据结构。 */ export abstract class Result implements LoggerFriendly { protected __PhantomType__?: T protected options: ResultOptions readonly logger: Logger constructor(options: ResultOptions) { this.options = options this.logger = Logger.fromOptions(options).setDefaultName("Result") } abstract handle(apiCore: ApiCore): Promise } // ====================== export interface SuccessResultOptions extends ResultOptions {} export abstract class SuccessResult extends Result { protected __SuccessResultPhantomType__ = true declare protected options: SuccessResultOptions constructor(options: SuccessResultOptions) { super(options) this.logger.setDefaultName("SuccessResult") } } // ====================== export interface ErrorResultOptions extends ResultOptions {} export abstract class ErrorResult extends Result { protected __ErrorResultPhantomType__ = true declare protected options: ErrorResultOptions constructor(options: ErrorResultOptions) { super(options) this.logger.setDefaultName("ErrorResult") } }