diff --git a/src/entity/unit/inspection/inspection.ts b/src/entity/unit/inspection/inspection.ts new file mode 100644 index 0000000..1537492 --- /dev/null +++ b/src/entity/unit/inspection/inspection.ts @@ -0,0 +1,36 @@ +import { Column, ColumnType, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; +import { inspectionPlan } from "./inspectionPlan"; +import { inspectionVersionedPlan } from "./inspectionVersionedPlan"; +import { getTypeByORM } from "../../../migrations/ormHelper"; +import { Vehicle } from "../vehicle/vehicle"; +import { Equipment } from "../equipment/equipment"; + +@Entity() +export class inspection { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "text" }) + context: string; + + @CreateDateColumn() + createdAt: Date; + + @Column({ type: getTypeByORM("date").type as ColumnType, nullable: true }) + finished?: Date; + + @Column({ type: getTypeByORM("date").type as ColumnType, nullable: true }) + nextInspection?: Date; + + @ManyToOne(() => inspectionPlan) + inspectionPlan: inspectionPlan; + + @ManyToOne(() => inspectionVersionedPlan) + inspectionVersionedPlan: inspectionVersionedPlan; + + @ManyToOne(() => Equipment) + equipment: Equipment; + + @ManyToOne(() => Vehicle) + vehicle: Vehicle; +} diff --git a/src/entity/unit/inspection/inspectionPlan.ts b/src/entity/unit/inspection/inspectionPlan.ts new file mode 100644 index 0000000..491a1a3 --- /dev/null +++ b/src/entity/unit/inspection/inspectionPlan.ts @@ -0,0 +1,42 @@ +import { Column, CreateDateColumn, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Equipment } from "../equipment/equipment"; +import { Vehicle } from "../vehicle/vehicle"; +import { PlanTimeDefinition } from "../../../viewmodel/admin/unit/inspectionPlan/inspectionPlan.models"; +import { inspectionVersionedPlan } from "./inspectionVersionedPlan"; + +@Entity() +export class inspectionPlan { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255 }) + title: string; + + @Column({ type: "varchar", length: 255 }) + inspectionInterval: PlanTimeDefinition; + + @Column({ type: "varchar", length: 255 }) + remindTime: PlanTimeDefinition; + + @CreateDateColumn() + created: Date; + + @Column() + equipmentId: string; + + @Column() + vehicleId: string; + + @ManyToOne(() => Equipment) + equipment: Equipment; + + @ManyToOne(() => Vehicle) + vehicle: Vehicle; + + @OneToMany(() => inspectionVersionedPlan, (ivp) => ivp.inspectionPlan, { + cascade: ["insert"], + }) + versionedPlans: inspectionVersionedPlan[]; + + latestVersionedPlan?: inspectionVersionedPlan; +} diff --git a/src/entity/unit/inspection/inspectionPoint.ts b/src/entity/unit/inspection/inspectionPoint.ts new file mode 100644 index 0000000..28be6e0 --- /dev/null +++ b/src/entity/unit/inspection/inspectionPoint.ts @@ -0,0 +1,39 @@ +import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; +import { InspectionPointEnum } from "../../../enums/inspectionEnum"; +import { inspectionVersionedPlan } from "./inspectionVersionedPlan"; + +@Entity() +export class inspectionPoint { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255 }) + title: string; + + @Column({ type: "text" }) + description: string; + + @Column({ + type: "varchar", + length: 255, + transformer: { + to(value: InspectionPointEnum) { + return value.toString(); + }, + from(value: string) { + return InspectionPointEnum[value as keyof typeof InspectionPointEnum]; + }, + }, + }) + type: InspectionPointEnum; + + @Column({ type: "int", default: 0 }) + min: number; + + @ManyToOne(() => inspectionVersionedPlan, { + nullable: false, + onDelete: "CASCADE", + onUpdate: "RESTRICT", + }) + versionedPlan: inspectionVersionedPlan; +} diff --git a/src/entity/unit/inspection/inspectionPointResult.ts b/src/entity/unit/inspection/inspectionPointResult.ts new file mode 100644 index 0000000..2460516 --- /dev/null +++ b/src/entity/unit/inspection/inspectionPointResult.ts @@ -0,0 +1,19 @@ +import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; +import { inspection } from "./inspection"; +import { inspectionPoint } from "./inspectionPoint"; +import { inspectionVersionedPlan } from "./inspectionVersionedPlan"; + +@Entity() +export class inspectionPointResult { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "text" }) + value: string; + + @ManyToOne(() => inspection) + inspection: inspection; + + @ManyToOne(() => inspectionPoint) + inspectionPoint: inspectionPoint; +} diff --git a/src/entity/unit/inspection/inspectionVersionedPlan.ts b/src/entity/unit/inspection/inspectionVersionedPlan.ts new file mode 100644 index 0000000..2e8195f --- /dev/null +++ b/src/entity/unit/inspection/inspectionVersionedPlan.ts @@ -0,0 +1,35 @@ +import { Column, CreateDateColumn, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn, Unique } from "typeorm"; +import { Equipment } from "../equipment/equipment"; +import { Vehicle } from "../vehicle/vehicle"; +import { PlanTimeDefinition } from "../../../viewmodel/admin/unit/inspectionPlan/inspectionPlan.models"; +import { inspectionPlan } from "./inspectionPlan"; +import { getTypeByORM } from "../../../migrations/ormHelper"; +import { inspectionPoint } from "./inspectionPoint"; + +@Entity() +@Unique("unique_version", ["version", "inspectionPlanId"]) +export class inspectionVersionedPlan { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "int", default: 0 }) + version: number; + + @CreateDateColumn() + created: Date; + + @Column() + inspectionPlanId: string; + + @ManyToOne(() => inspectionPlan, { + nullable: false, + onDelete: "CASCADE", + onUpdate: "RESTRICT", + }) + inspectionPlan: inspectionPlan; + + @OneToMany(() => inspectionPoint, (ip) => ip.versionedPlan, { + cascade: ["insert"], + }) + inspectionPoints: inspectionPoint[]; +} diff --git a/src/enums/inspectionEnum.ts b/src/enums/inspectionEnum.ts new file mode 100644 index 0000000..5c87e55 --- /dev/null +++ b/src/enums/inspectionEnum.ts @@ -0,0 +1,5 @@ +export enum InspectionPointEnum { + oknok = "oknok", + text = "text", + number = "number", +} diff --git a/src/viewmodel/admin/unit/damageReport/damageReport.models.ts b/src/viewmodel/admin/unit/damageReport/damageReport.models.ts index b95ee33..e1d7075 100644 --- a/src/viewmodel/admin/unit/damageReport/damageReport.models.ts +++ b/src/viewmodel/admin/unit/damageReport/damageReport.models.ts @@ -2,7 +2,7 @@ import type { EquipmentViewModel } from "../equipment/equipment.models"; import type { VehicleViewModel } from "../vehicle/vehicle.models"; import type { WearableViewModel } from "../wearable/wearable.models"; -export interface DamageReportViewModel { +export type DamageReportViewModel = { id: string; reported: Date; status: string; @@ -10,9 +10,20 @@ export interface DamageReportViewModel { description: string; providedImage: Array; relatedId: string; - related: EquipmentViewModel | VehicleViewModel | WearableViewModel; - affected: "equipment" | "vehicle" | "wearable"; -} +} & ( + | { + assigned: "equipment"; + related: EquipmentViewModel; + } + | { + assigned: "vehicle"; + related: VehicleViewModel; + } + | { + assigned: "wearable"; + related: WearableViewModel; + } +); export interface CreateDamageReportViewModel { description: string; diff --git a/src/viewmodel/admin/unit/inspection/inspection.models.ts b/src/viewmodel/admin/unit/inspection/inspection.models.ts index a25c279..8cd2e5f 100644 --- a/src/viewmodel/admin/unit/inspection/inspection.models.ts +++ b/src/viewmodel/admin/unit/inspection/inspection.models.ts @@ -5,7 +5,7 @@ import type { } from "../inspectionPlan/inspectionPlan.models"; import type { VehicleViewModel } from "../vehicle/vehicle.models"; -export interface InspectionViewModel { +export type InspectionViewModel = { id: string; inspectionPlanId: string; inspectionPlan: InspectionPlanViewModel; @@ -18,16 +18,16 @@ export interface InspectionViewModel { nextInspection?: Date; checks: Array; relatedId: string; - related: EquipmentViewModel | VehicleViewModel; -} - -export interface InspectionPointViewModel { - id: string; - title: string; - description: string; - type: "iO-niO" | "text" | "number"; - min?: number; -} +} & ( + | { + assigned: "equipment"; + related: EquipmentViewModel; + } + | { + assigned: "vehicle"; + related: VehicleViewModel; + } +); export interface InspectionPointResultViewModel { inspectionId: string; diff --git a/src/viewmodel/admin/unit/inspectionPlan/inspectionPlan.models.ts b/src/viewmodel/admin/unit/inspectionPlan/inspectionPlan.models.ts index cdfb8b2..31384d7 100644 --- a/src/viewmodel/admin/unit/inspectionPlan/inspectionPlan.models.ts +++ b/src/viewmodel/admin/unit/inspectionPlan/inspectionPlan.models.ts @@ -1,12 +1,10 @@ +import { InspectionPointEnum } from "../../../../enums/inspectionEnum"; import type { EquipmentViewModel } from "../equipment/equipment.models"; -import type { EquipmentTypeViewModel } from "../equipmentType/equipmentType.models"; -import type { InspectionPointViewModel } from "../inspection/inspection.models"; import type { VehicleViewModel } from "../vehicle/vehicle.models"; -import type { VehicleTypeViewModel } from "../vehicleType/vehicleType.models"; export type PlanTimeDefinition = `${number}-${"d" | "m" | "y"}` | `${number}/${number | "*"}`; -export interface InspectionPlanViewModel { +export type InspectionPlanViewModel = { id: string; title: string; inspectionInterval: PlanTimeDefinition; @@ -15,8 +13,16 @@ export interface InspectionPlanViewModel { created: Date; inspectionPoints: InspectionPointViewModel[]; relatedId: string; - related: EquipmentTypeViewModel | VehicleTypeViewModel; -} +} & ( + | { + assigned: "equipment"; + related: EquipmentViewModel; + } + | { + assigned: "vehicle"; + related: VehicleViewModel; + } +); export interface InspectionVersionedPlanViewModel { id: string; @@ -25,6 +31,14 @@ export interface InspectionVersionedPlanViewModel { inspectionPoints: InspectionPointViewModel[]; } +export interface InspectionPointViewModel { + id: string; + title: string; + description: string; + type: InspectionPointEnum; + min?: number; +} + export interface CreateInspectionPlanViewModel { title: string; inspectionInterval: PlanTimeDefinition;