import { dataSource } from "../../data-source"; import { damageReport } from "../../entity/unit/damageReport"; import DatabaseActionException from "../../exceptions/databaseActionException"; export default abstract class DamageReportService { private static query = () => dataSource .getRepository(damageReport) .createQueryBuilder("damageReport") .leftJoinAndSelect("damageReport.equipment", "equipment") .leftJoinAndSelect("damageReport.vehicle", "vehicle") .leftJoinAndSelect("damageReport.wearable", "wearable") .leftJoinAndSelect("damageReport.maintenance", "maintenance"); /** * @description get all damageReports By done * @returns {Promise<[Array, number]>} */ static async getAll( done = false, { offset = 0, count = 25, noLimit = false, }: { offset?: number; count?: number; noLimit?: boolean; } ): Promise<[Array, number]> { let query = this.query().where({ done }); if (!noLimit) { query = query.offset(offset).limit(count); } return await query .orderBy("damageReport.reportedAt", "ASC") .getManyAndCount() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "damageReport", err); }); } /** * @description get all damageReports By related * @returns {Promise<[Array, number]>} */ static async getAllForRelated( where: { equipmentId: string } | { vehicleId: string } | { wearableId: string }, { offset = 0, count = 25, noLimit = false, }: { offset?: number; count?: number; noLimit?: boolean; } ): Promise<[Array, number]> { let query = this.query().where(where); if (!noLimit) { query = query.offset(offset).limit(count); } return await query .orderBy("damageReport.reportedAt", "ASC") .getManyAndCount() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "damageReport", err); }); } /** * @description get damageReport by id * @returns {Promise} */ static async getById(id: string): Promise { return await this.query() .where({ id }) .getOneOrFail() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "damageReport", err); }); } }