import { ParamsDictionary, Request, Response } from 'express-serve-static-core'; import { CommonRes, ConfigRes, ControllersReq, ControllersRes, GenerateReq, SaveReq } from '../defines/models'; import { ParsedQs } from 'qs'; import { Service } from './service'; export namespace Controller { export async function response(app: any) { /** * 컨트롤러 목록 반환 */ doCommonResponse(app, 'controllers', 'get', async (req, res) => { const response = await Service.getControllers(req.query); res.status(response.status).send(response); }); /** * 코드 생성 */ doCommonResponse(app, 'generate', 'post', async (req, res) => { await Service.postSave(req.body as SaveReq); const status = await Service.postGenerate(req.body); res.status(status).send(); }); /** * 설정 저장 */ doCommonResponse(app, 'save', 'post', async (req, res) => { const status = await Service.postSave(req.body); res.status(status).send(); }); /** * 설정 불러오기 */ doCommonResponse(app, 'config', 'get', async (req, res) => { const config = Service.getConfig(); const { apiDocsUri } = config; const { controllerNames } = await Service.getControllers({ apiDocsUri }, '/config'); res.send({ controllerNamesByUri: controllerNames, config }); }); } function doCommonResponse( app: any, path: string, method: 'get' | 'post', callback: (req: Request, res: Response>) => void, ) { app[method](`/api/${path}`, async (req: Request, res: Response>) => { console.log(`\nrequest: /${path}`); await callback(req, res); }); } }