import { Request, Response } from "express"; import ApiService from "../../../service/user/apiService"; import ApiFactory from "../../../factory/admin/user/api"; import ApiPermissionService from "../../../service/user/apiPermissionService"; import PermissionHelper from "../../../helpers/permissionHelper"; import { CreateApiCommand, DeleteApiCommand, UpdateApiCommand } from "../../../command/user/api/apiCommand"; import ApiCommandHandler from "../../../command/user/api/apiCommandHandler"; import { UpdateApiPermissionsCommand } from "../../../command/user/api/apiPermissionCommand"; import ApiPermissionCommandHandler from "../../../command/user/api/apiPermissionCommandHandler"; /** * @description get All apis * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getAllApis(req: Request, res: Response): Promise { let apis = await ApiService.getAll(); res.json(ApiFactory.mapToBase(apis)); } /** * @description get api by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getApiById(req: Request, res: Response): Promise { const id = parseInt(req.params.id); let api = await ApiService.getById(id); res.json(ApiFactory.mapToSingle(api)); } /** * @description get api token by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getApiTokenById(req: Request, res: Response): Promise { const id = parseInt(req.params.id); let { token } = await ApiService.getTokenById(id); res.send(token); } /** * @description get permissions by api * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getApiPermissions(req: Request, res: Response): Promise { const id = parseInt(req.params.id); let permissions = await ApiPermissionService.getByApi(id); res.json(PermissionHelper.convertToObject(permissions.map((p) => p.permission))); } /** * @description create new api * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function createApi(req: Request, res: Response): Promise { let title = req.body.title; let expiry = req.body.expiry; // TODO: create jwt as token to prevent random string tests let createApi: CreateApiCommand = { token: "", title: title, expiry: expiry, }; await ApiCommandHandler.create(createApi); res.sendStatus(204); } /** * @description update api data * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function updateApi(req: Request, res: Response): Promise { const id = parseInt(req.params.id); let title = req.body.title; let expiry = req.body.expiry; let updateApi: UpdateApiCommand = { id: id, title: title, expiry: expiry, }; await ApiCommandHandler.update(updateApi); res.sendStatus(204); } /** * @description update api assigned permission strings * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function updateApiPermissions(req: Request, res: Response): Promise { const id = parseInt(req.params.id); let permissions = req.body.permissions; let permissionStrings = PermissionHelper.convertToStringArray(permissions); let updateApiPermissions: UpdateApiPermissionsCommand = { apiId: id, permissions: permissionStrings, }; await ApiPermissionCommandHandler.updatePermissions(updateApiPermissions); res.sendStatus(204); } /** * @description delete api by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function deleteApi(req: Request, res: Response): Promise { const id = parseInt(req.params.id); let deleteApi: DeleteApiCommand = { id: id, }; await ApiCommandHandler.delete(deleteApi); res.sendStatus(204); }