/
githubmirror
/
lemon-agent
Обзор
Документация
Войти
/
githubmirror
/
lemon-agent
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/agent/src/infra/api/controllers/base-controller.ts
93 строки
2 KB
Felix Brockmeier
Add lemon agent logic
01 авг 2023, 14:29
01 авг 2023, 14:29
943d0ef
Код
Авторство
О чём код?
// TODO - replace any with unknown export type Request = Record<string, any>; export const isRequest = (value: unknown): value is Request => !!value && typeof value === 'object'; export interface Response { status: (code: number) => Response; json: (dto: unknown) => Response; type: (type: string) => Response; } export const isResponse = (value: unknown): value is Request => !!value && typeof value === 'object' && 'status' in value && 'json' in value; export enum CodeHttp { OK = 200, CREATED, BAD_REQUEST = 400, UNAUTHORIZED, FORBIDDEN = 403, NOT_FOUND, CONFLICT = 409, SERVER_ERROR = 500, } export interface UserAccountInfo { userId?: string; accountId?: string; callerOrgId?: string; isSystemInternal: boolean; } export abstract class BaseController { protected static jsonResponse( res: Response, code: number, message: string ): Response { return res.status(code).json({ message }); } async execute(req: Request, res: Response): Promise<void> { try { await this.executeImpl(req, res); } catch (error) { BaseController.fail(res, 'An unexpected error occurred'); } } static ok<T>(res: Response, dto?: T, created?: CodeHttp): Response { const codeHttp: CodeHttp = created || CodeHttp.OK; if (dto) { res.type('application/json'); return res.status(codeHttp).json(dto); } return res.status(codeHttp).json(dto); } static badRequest(res: Response, message?: string): Response { return BaseController.jsonResponse( res, CodeHttp.BAD_REQUEST, message || 'BadRequest' ); } static unauthorized(res: Response, message?: string): Response { return BaseController.jsonResponse( res, CodeHttp.UNAUTHORIZED, message || 'Unauthorized' ); } static notFound(res: Response, message?: string): Response { return BaseController.jsonResponse( res, CodeHttp.NOT_FOUND, message || 'Not found' ); } static fail(res: Response, error: Error | string): Response { return res.status(CodeHttp.SERVER_ERROR).json({ message: error.toString(), }); } protected abstract executeImpl( req: Request, res: Response ): Promise<Response>; }