103 lines
3.4 KiB
TypeScript
103 lines
3.4 KiB
TypeScript
import { dataSource } from "../../data-source";
|
|
import { damageReport } from "../../entity/unit/damageReport";
|
|
import DatabaseActionException from "../../exceptions/databaseActionException";
|
|
import {
|
|
CreateDamageReportCommand,
|
|
UpdateDamageReportCommand,
|
|
DeleteDamageReportCommand,
|
|
UpdateDamageReportRelatedRepairCommand,
|
|
} from "./damageReportCommand";
|
|
|
|
export default abstract class DamageReportCommandHandler {
|
|
/**
|
|
* @description create damageReport
|
|
* @param {CreateDamageReportCommand} createDamageReport
|
|
* @returns {Promise<number>}
|
|
*/
|
|
static async create(createDamageReport: CreateDamageReportCommand): Promise<number> {
|
|
return await dataSource
|
|
.createQueryBuilder()
|
|
.insert()
|
|
.into(damageReport)
|
|
.values({
|
|
status: "eingereicht",
|
|
title: createDamageReport.title,
|
|
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<void>}
|
|
*/
|
|
static async update(updateDamageReport: UpdateDamageReportCommand): Promise<void> {
|
|
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<void>}
|
|
*/
|
|
static async updateRelatedMaintenance(updateDamageReport: UpdateDamageReportRelatedRepairCommand): Promise<void> {
|
|
return await dataSource
|
|
.createQueryBuilder()
|
|
.update(damageReport)
|
|
.set({
|
|
repairId: updateDamageReport.repairId,
|
|
})
|
|
.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<void>}
|
|
*/
|
|
static async delete(deleteDamageReport: DeleteDamageReportCommand): Promise<void> {
|
|
// 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);
|
|
});
|
|
}
|
|
}
|