import { maintenance } from "../../../entity/unit/maintenance"; import { MaintenanceAssigned, MaintenanceViewModel } from "../../../viewmodel/admin/unit/maintenance.models"; import DamageReportFactory from "./damageReport"; import EquipmentFactory from "./equipment/equipment"; import VehicleFactory from "./vehicle/vehicle"; import WearableFactory from "./wearable/wearable"; export default abstract class MaintenanceFactory { /** * @description map record to maintenance * @param {maintenance} record * @returns {MaintenanceViewModel} */ public static mapToSingle(record: maintenance): MaintenanceViewModel { let assigned: MaintenanceAssigned; if (record?.equipmentId) { assigned = { relatedId: record.equipmentId, assigned: "equipment", related: EquipmentFactory.mapToSingle(record.equipment), }; } else if (record?.vehicleId) { assigned = { relatedId: record.vehicleId, assigned: "vehicle", related: VehicleFactory.mapToSingle(record.vehicle), }; } else { assigned = { relatedId: record.wearableId, assigned: "wearable", related: WearableFactory.mapToSingle(record.wearable), }; } return { id: record.id, createdAt: record.createdAt, status: record.status, done: record.done, description: record.description, ...assigned, reports: record.reports ? DamageReportFactory.mapToBase(record.reports) : [], }; } /** * @description map records to maintenance * @param {Array<maintenance>} records * @returns {Array<MaintenanceViewModel>} */ public static mapToBase(records: Array<maintenance>): Array<MaintenanceViewModel> { return records.map((r) => this.mapToSingle(r)); } }