import { dataSource } from "../../data-source"; import { maintenance } from "../../entity/unit/maintenance"; import DatabaseActionException from "../../exceptions/databaseActionException"; export default abstract class MaintenanceService { private static query = () => dataSource .getRepository(maintenance) .createQueryBuilder("maintenance") .leftJoinAndSelect("maintenance.equipment", "equipment") .leftJoinAndSelect("maintenance.vehicle", "vehicle") .leftJoinAndSelect("maintenance.wearable", "wearable") .leftJoinAndSelect("maintenance.reports", "reports"); /** * @description get all maintenances * @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("maintenance.type", "ASC") .getManyAndCount() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "maintenance", err); }); } /** * @description get all maintenances 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("maintenance.createdAt", "ASC") .getManyAndCount() .then((res) => { return res; }) .catch((err) => { throw new DatabaseActionException("SELECT", "maintenance", err); }); } /** * @description get maintenance 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", "maintenance", err); }); } }