import { Request, Response } from "express"; import DamageReportService from "../../../service/unit/damageReportService"; import DamageReportFactory from "../../../factory/admin/unit/damageReport"; import { CreateDamageReportCommand, UpdateDamageReportCommand } from "../../../command/unit/damageReportCommand"; import DamageReportCommandHandler from "../../../command/unit/damageReportCommandHandler"; import BadRequestException from "../../../exceptions/badRequestException"; /** * @description get all damageReports by status * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getAllDamageReportsByStatus(req: Request, res: Response): Promise { let done = req.query.done === "true"; let offset = parseInt((req.query.offset as string) ?? "0"); let count = parseInt((req.query.count as string) ?? "25"); let noLimit = req.query.noLimit === "true"; let [damageReports, total] = await DamageReportService.getAll(done, { offset, count, noLimit }); res.json({ damageReports: DamageReportFactory.mapToBase(damageReports), total: total, offset: offset, count: count, }); } /** * @description get all damageReports for related id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getAllDamageReportsForRelated(req: Request, res: Response): Promise { let relation = req.params.related as "vehicle" | "equipment" | "wearable"; let relationId = req.params.relatedId as string; let offset = parseInt((req.query.offset as string) ?? "0"); let count = parseInt((req.query.count as string) ?? "25"); let noLimit = req.query.noLimit === "true"; let where; if (relation == "equipment") { where = { equipmentId: relationId }; } else if (relation == "vehicle") { where = { vehicleId: relationId }; } else { where = { wearableId: relationId }; } let [damageReports, total] = await DamageReportService.getAllForRelated(where, { offset, count, noLimit }); res.json({ damageReports: DamageReportFactory.mapToBase(damageReports), total: total, offset: offset, count: count, }); } /** * @description get damageReport by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getDamageReportById(req: Request, res: Response): Promise { const damageReportId = req.params.id; let damageReport = await DamageReportService.getById(damageReportId); res.json(DamageReportFactory.mapToSingle(damageReport)); } /** * @description create damageReport * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function createDamageReport(req: Request, res: Response): Promise { const description = req.body.description; const reportedBy = req.body.reportedBy; const affectedId = req.body.affectedId; const affected = req.body.affected; if (affected != "equipment" && affected != "vehicle" && affected != "wearable") throw new BadRequestException("set assigned to equipment or vehicle or wearable"); let createDamageReport: CreateDamageReportCommand = { description, reportedBy, imageCount: 0, affectedId, affected, }; let damageReportId = await DamageReportCommandHandler.create(createDamageReport); res.status(200).send(damageReportId); } /** * @description update damageReport by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function updateDamageReportById(req: Request, res: Response): Promise { const damageReportId = req.params.id; const status = req.body.status; const done = req.body.done; let updateDamageReport: UpdateDamageReportCommand = { id: damageReportId, status, done, }; await DamageReportCommandHandler.update(updateDamageReport); res.sendStatus(204); }