import { Request, Response } from "express"; import InspectionService from "../../../service/unit/inspection/inspectionService"; import InspectionFactory from "../../../factory/admin/unit/inspection/inspection"; import { CreateInspectionCommand, DeleteInspectionCommand, UpdateInspectionCommand, } from "../../../command/unit/inspection/inspectionCommand"; import InspectionCommandHandler from "../../../command/unit/inspection/inspectionCommandHandler"; import BadRequestException from "../../../exceptions/badRequestException"; import ForbiddenRequestException from "../../../exceptions/forbiddenRequestException"; /** * @description get all inspections sorted by id not having newer inspection * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getAllInspectionsSortedNotHavingNewer(req: Request, res: Response): Promise { 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 [inspections, total] = await InspectionService.getAllSortedNotHavingNewer({ offset, count, noLimit }); res.json({ inspections: InspectionFactory.mapToBase(inspections), total: total, offset: offset, count: count, }); } /** * @description get all inspections running * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getAllInspectionsRunning(req: Request, res: Response): Promise { 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 [inspections, total] = await InspectionService.getAllRunning({ offset, count, noLimit }); res.json({ inspections: InspectionFactory.mapToBase(inspections), total: total, offset: offset, count: count, }); } /** * @description get all inspections for related id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getAllInspectionsForRelated(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 [inspections, total] = await InspectionService.getAllForRelated(where, { offset, count, noLimit }); res.json({ inspections: InspectionFactory.mapToBase(inspections), total: total, offset: offset, count: count, }); } /** * @description get inspection by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getInspectionById(req: Request, res: Response): Promise { const inspectionId = req.params.id; let inspection = await InspectionService.getById(inspectionId); res.json(InspectionFactory.mapToSingle(inspection)); } /** * @description create inspection * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function createInspection(req: Request, res: Response): Promise { const context = req.body.context; const inspectionPlanId = req.body.inspectionPlanId; const relatedId = req.body.relatedId; const assigned = req.body.assigned; const nextInspection = req.body.nextInspection || null; if (assigned != "equipment" && assigned != "vehicle" && assigned != "wearable") throw new BadRequestException("set assigned to equipment or vehicle or wearable"); let createInspection: CreateInspectionCommand = { context, nextInspection, inspectionPlanId, relatedId, assigned, }; let inspectionId = await InspectionCommandHandler.create(createInspection); res.status(200).send(inspectionId); } /** * @description update inspection by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function updateInspectionById(req: Request, res: Response): Promise { const inspectionId = req.params.id; const context = req.body.context; const nextInspection = req.body.nextInspection || null; let updateInspection: UpdateInspectionCommand = { id: inspectionId, context, nextInspection, }; await InspectionCommandHandler.update(updateInspection); res.sendStatus(204); } /** * @description delete inspection by id * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function deleteInspectionById(req: Request, res: Response): Promise { const inspectionId = req.params.id; let deleteInspectionData = await InspectionService.getById(inspectionId); if (deleteInspectionData.finishedAt != null) { throw new ForbiddenRequestException("Cannot delete as inspection is already finished"); } let deleteInspection: DeleteInspectionCommand = { id: inspectionId, }; await InspectionCommandHandler.delete(deleteInspection); res.sendStatus(204); }