From 95d1113ff93002d51f4f203e3c52e6fe4d086329 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Sat, 24 May 2025 11:31:15 +0200 Subject: [PATCH] base unit data --- src/entity/unit/damageReport.ts | 52 ++++++++++++++++++++++ src/entity/unit/equipment/equipment.ts | 38 ++++++++++++++++ src/entity/unit/equipment/equipmentType.ts | 19 ++++++++ src/entity/unit/vehicle/vehicle.ts | 38 ++++++++++++++++ src/entity/unit/vehicle/vehicleType.ts | 19 ++++++++ src/entity/unit/wearable/wearable.ts | 49 ++++++++++++++++++++ src/entity/unit/wearable/wearableType.ts | 17 +++++++ 7 files changed, 232 insertions(+) create mode 100644 src/entity/unit/damageReport.ts create mode 100644 src/entity/unit/equipment/equipment.ts create mode 100644 src/entity/unit/equipment/equipmentType.ts create mode 100644 src/entity/unit/vehicle/vehicle.ts create mode 100644 src/entity/unit/vehicle/vehicleType.ts create mode 100644 src/entity/unit/wearable/wearable.ts create mode 100644 src/entity/unit/wearable/wearableType.ts diff --git a/src/entity/unit/damageReport.ts b/src/entity/unit/damageReport.ts new file mode 100644 index 0000000..b8feefe --- /dev/null +++ b/src/entity/unit/damageReport.ts @@ -0,0 +1,52 @@ +import { Check, Column, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; +import { Equipment } from "./equipment/equipment"; +import { Wearable } from "./wearable/wearable"; +import { Vehicle } from "./vehicle/vehicle"; + +@Entity() +export class DamageReport { + @PrimaryGeneratedColumn("uuid") + id: string; + + @CreateDateColumn() + reported: Date; + + @Column({ type: "varchar", length: 255 }) + status: string; + + @Column({ type: "boolean", default: false }) + done: boolean; + + @Column({ type: "text" }) + description: string; + + @Column({ nullable: true }) + equipmentId: string; + + @Column({ nullable: true }) + vehicleId: string; + + @Column({ nullable: true }) + wearableId: string; + + @ManyToOne(() => Equipment, { + nullable: true, + onDelete: "CASCADE", + onUpdate: "RESTRICT", + }) + equipment: Equipment; + + @ManyToOne(() => Vehicle, { + nullable: true, + onDelete: "CASCADE", + onUpdate: "RESTRICT", + }) + vehicle: Vehicle; + + @ManyToOne(() => Wearable, { + nullable: true, + onDelete: "CASCADE", + onUpdate: "RESTRICT", + }) + wearable: Wearable; +} diff --git a/src/entity/unit/equipment/equipment.ts b/src/entity/unit/equipment/equipment.ts new file mode 100644 index 0000000..9748cb1 --- /dev/null +++ b/src/entity/unit/equipment/equipment.ts @@ -0,0 +1,38 @@ +import { Column, ColumnType, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { getTypeByORM } from "../../../migrations/ormHelper"; +import { EquipmentType } from "./equipmentType"; +import { DamageReport } from "../damageReport"; + +@Entity() +export class Equipment { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255, nullable: true, unique: true }) + code?: string; + + @Column({ type: "varchar", length: 255 }) + name: string; + + @Column({ type: "varchar", length: 255 }) + location: string; + + @Column({ type: getTypeByORM("datetime").type as ColumnType }) + commissioned: Date; + + @Column({ type: getTypeByORM("datetime").type as ColumnType, nullable: true }) + decommissioned?: Date; + + @Column() + equipmentTypeId: string; + + @ManyToOne(() => EquipmentType, { + nullable: false, + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + equipmentType: EquipmentType; + + @OneToMany(() => DamageReport, (d) => d.equipment, { cascade: ["insert"] }) + reports: DamageReport[]; +} diff --git a/src/entity/unit/equipment/equipmentType.ts b/src/entity/unit/equipment/equipmentType.ts new file mode 100644 index 0000000..1bd25bd --- /dev/null +++ b/src/entity/unit/equipment/equipmentType.ts @@ -0,0 +1,19 @@ +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Equipment } from "./equipment"; + +@Entity() +export class EquipmentType { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255 }) + type: string; + + @Column({ type: "text", nullable: true }) + description: string; + + @OneToMany(() => Equipment, (e) => e.equipmentType, { cascade: ["insert"] }) + equipment: Equipment[]; + + inspectionPlans: Array; +} diff --git a/src/entity/unit/vehicle/vehicle.ts b/src/entity/unit/vehicle/vehicle.ts new file mode 100644 index 0000000..cff687e --- /dev/null +++ b/src/entity/unit/vehicle/vehicle.ts @@ -0,0 +1,38 @@ +import { Column, ColumnType, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { getTypeByORM } from "../../../migrations/ormHelper"; +import { VehicleType } from "./vehicleType"; +import { DamageReport } from "../damageReport"; + +@Entity() +export class Vehicle { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255, nullable: true, unique: true }) + code?: string; + + @Column({ type: "varchar", length: 255 }) + name: string; + + @Column({ type: "varchar", length: 255 }) + location: string; + + @Column({ type: getTypeByORM("datetime").type as ColumnType }) + commissioned: Date; + + @Column({ type: getTypeByORM("datetime").type as ColumnType, nullable: true }) + decommissioned?: Date; + + @Column() + vehicleTypeId: string; + + @ManyToOne(() => VehicleType, { + nullable: false, + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + vehicleType: VehicleType; + + @OneToMany(() => DamageReport, (d) => d.vehicle, { cascade: ["insert"] }) + reports: DamageReport[]; +} diff --git a/src/entity/unit/vehicle/vehicleType.ts b/src/entity/unit/vehicle/vehicleType.ts new file mode 100644 index 0000000..7f43510 --- /dev/null +++ b/src/entity/unit/vehicle/vehicleType.ts @@ -0,0 +1,19 @@ +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Vehicle } from "./vehicle"; + +@Entity() +export class VehicleType { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255 }) + type: string; + + @Column({ type: "text", nullable: true }) + description: string; + + @OneToMany(() => Vehicle, (e) => e.vehicleType, { cascade: ["insert"] }) + equipment: Vehicle[]; + + inspectionPlans: Array; +} diff --git a/src/entity/unit/wearable/wearable.ts b/src/entity/unit/wearable/wearable.ts new file mode 100644 index 0000000..439025b --- /dev/null +++ b/src/entity/unit/wearable/wearable.ts @@ -0,0 +1,49 @@ +import { Column, ColumnType, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { getTypeByORM } from "../../../migrations/ormHelper"; +import { WearableType } from "./wearableType"; +import { DamageReport } from "../damageReport"; +import { member } from "../../club/member/member"; + +@Entity() +export class Wearable { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255, nullable: true, unique: true }) + code?: string; + + @Column({ type: "varchar", length: 255 }) + name: string; + + @Column({ type: "varchar", length: 255 }) + location: string; + + @Column({ type: getTypeByORM("datetime").type as ColumnType }) + commissioned: Date; + + @Column({ type: getTypeByORM("datetime").type as ColumnType, nullable: true }) + decommissioned?: Date; + + @Column() + equipmentTypeId: string; + + @Column() + wearerId: string; + + @ManyToOne(() => WearableType, { + nullable: false, + onDelete: "RESTRICT", + onUpdate: "RESTRICT", + }) + wearableType: WearableType; + + @ManyToOne(() => member, { + nullable: false, + onDelete: "SET NULL", + onUpdate: "RESTRICT", + }) + wearer: member; + + @OneToMany(() => DamageReport, (d) => d.wearable, { cascade: ["insert"] }) + reports: DamageReport[]; +} diff --git a/src/entity/unit/wearable/wearableType.ts b/src/entity/unit/wearable/wearableType.ts new file mode 100644 index 0000000..f900b84 --- /dev/null +++ b/src/entity/unit/wearable/wearableType.ts @@ -0,0 +1,17 @@ +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Wearable } from "./wearable"; + +@Entity() +export class WearableType { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ type: "varchar", length: 255 }) + type: string; + + @Column({ type: "text", nullable: true }) + description: string; + + @OneToMany(() => Wearable, (e) => e.wearableType, { cascade: ["insert"] }) + equipment: Wearable[]; +}