import { dataSource } from "../../data-source"; import { damageReport } from "../../entity/unit/damageReport"; import DatabaseActionException from "../../exceptions/databaseActionException"; import { CreateDamageReportCommand, UpdateDamageReportCommand, DeleteDamageReportCommand, UpdateDamageReportRelatedMaintenanceCommand, } from "./damageReportCommand"; export default abstract class DamageReportCommandHandler { /** * @description create damageReport * @param {CreateDamageReportCommand} createDamageReport * @returns {Promise} */ static async create(createDamageReport: CreateDamageReportCommand): Promise { return await dataSource .createQueryBuilder() .insert() .into(damageReport) .values({ status: "eingereicht", description: createDamageReport.description, location: createDamageReport.location, noteByReporter: createDamageReport.noteByReporter, reportedBy: createDamageReport.reportedBy, images: createDamageReport.images, equipmentId: createDamageReport.affected == "equipment" ? createDamageReport.affectedId : null, vehicleId: createDamageReport.affected == "vehicle" ? createDamageReport.affectedId : null, wearableId: createDamageReport.affected == "wearable" ? createDamageReport.affectedId : null, }) .execute() .then((result) => { return result.identifiers[0].id; }) .catch((err) => { throw new DatabaseActionException("CREATE", "damageReport", err); }); } /** * @description update damageReport * @param {UpdateDamageReportCommand} updateDamageReport * @returns {Promise} */ static async update(updateDamageReport: UpdateDamageReportCommand): Promise { return await dataSource .createQueryBuilder() .update(damageReport) .set({ status: updateDamageReport.status, noteByWorker: updateDamageReport.noteByWorker, done: updateDamageReport.done, }) .where("id = :id", { id: updateDamageReport.id }) .execute() .then(() => {}) .catch((err) => { throw new DatabaseActionException("UPDATE", "damageReport", err); }); } /** * @description update damageReport related maintenance * @param {UpdateDamageReportCommand} updateDamageReport * @returns {Promise} */ static async updateRelatedMaintenance( updateDamageReport: UpdateDamageReportRelatedMaintenanceCommand ): Promise { return await dataSource .createQueryBuilder() .update(damageReport) .set({ maintenanceId: updateDamageReport.maintenanceId, }) .where("id = :id", { id: updateDamageReport.id }) .execute() .then(() => {}) .catch((err) => { throw new DatabaseActionException("UPDATE", "damageReport->maintenance", err); }); } /** * @description delete damageReport * @param {DeleteDamageReportCommand} deleteDamageReport * @returns {Promise} */ static async delete(deleteDamageReport: DeleteDamageReportCommand): Promise { // TODO: remove related images return await dataSource .createQueryBuilder() .delete() .from(damageReport) .where("id = :id", { id: deleteDamageReport.id }) .execute() .then(() => {}) .catch((err) => { throw new DatabaseActionException("DELETE", "damageReport", err); }); } }