base migration and schema optimization

This commit is contained in:
Julian Krauser 2025-05-26 14:53:25 +02:00
parent 0d8499b828
commit d156cc6ad6
16 changed files with 426 additions and 22 deletions

View file

@ -0,0 +1,149 @@
import { Table, TableForeignKey, TableUnique, Unique } from "typeorm";
import { getTypeByORM, isUUIDPrimary, getDefaultByORM } from "../ormHelper";
export const inspection_plan_table = new Table({
name: "inspection_plan",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "title", ...getTypeByORM("varchar") },
{ name: "inspectionInterval", ...getTypeByORM("varchar") },
{ name: "remindTime", ...getTypeByORM("varchar") },
{ name: "createdAt", ...getTypeByORM("date"), default: getDefaultByORM("currentTimestamp") },
{ name: "equipmentId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
{ name: "vehicleId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["equipmentId"],
referencedColumnNames: ["id"],
referencedTableName: "equipment",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["vehicleId"],
referencedColumnNames: ["id"],
referencedTableName: "vehicle",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
],
});
export const inspection_versioned_plan_table = new Table({
name: "inspection_versioned_plan",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "version", ...getTypeByORM("int"), default: getDefaultByORM("number", 0) },
{ name: "createdAt", ...getTypeByORM("date"), default: getDefaultByORM("currentTimestamp") },
{ name: "inspectionPlanId", ...getTypeByORM("uuid") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["inspectionPlanId"],
referencedColumnNames: ["id"],
referencedTableName: "inspection_plan",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
],
uniques: [
new TableUnique({
name: "unique_version",
columnNames: ["version", "inspectionPlanId"],
}),
],
});
export const inspection_point_table = new Table({
name: "inspection_point",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "title", ...getTypeByORM("varchar") },
{ name: "description", ...getTypeByORM("text") },
{ name: "type", ...getTypeByORM("varchar") },
{ name: "min", ...getTypeByORM("int", true), default: getDefaultByORM("null") },
{ name: "max", ...getTypeByORM("int", true), default: getDefaultByORM("null") },
{ name: "versionedPlanId", ...getTypeByORM("uuid") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["versionedPlanId"],
referencedColumnNames: ["id"],
referencedTableName: "inspection_versioned_plan",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
],
});
export const inspection_table = new Table({
name: "inspection",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "context", ...getTypeByORM("text") },
{ name: "createdAt", ...getTypeByORM("date"), default: getDefaultByORM("currentTimestamp") },
{ name: "finishedAt", ...getTypeByORM("date", true) },
{ name: "nextInspection", ...getTypeByORM("date", true) },
{ name: "inspectionPlanId", ...getTypeByORM("uuid") },
{ name: "inspectionVersionedPlanId", ...getTypeByORM("uuid") },
{ name: "equipmentId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
{ name: "vehicleId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["inspectionPlanId"],
referencedColumnNames: ["id"],
referencedTableName: "inspection_plan",
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["inspectionVersionedPlanId"],
referencedColumnNames: ["id"],
referencedTableName: "inspection_versioned_plan",
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["equipmentId"],
referencedColumnNames: ["id"],
referencedTableName: "equipment",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["vehicleId"],
referencedColumnNames: ["id"],
referencedTableName: "vehicle",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
],
});
export const inspection_point_result_table = new Table({
name: "inspection_point_result",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "value", ...getTypeByORM("text") },
{ name: "inspectionId", ...getTypeByORM("uuid") },
{ name: "inspectionPointId", ...getTypeByORM("uuid") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["inspectionId"],
referencedColumnNames: ["id"],
referencedTableName: "inspection",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["inspectionPointId"],
referencedColumnNames: ["id"],
referencedTableName: "inspection_point",
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
}),
],
});

View file

@ -0,0 +1,103 @@
import { Table, TableForeignKey } from "typeorm";
import { getTypeByORM, isUUIDPrimary, getDefaultByORM } from "../ormHelper";
export const equipment_table = new Table({
name: "equipment",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "code", ...getTypeByORM("varchar", true), default: getDefaultByORM("null"), isUnique: true },
{ name: "name", ...getTypeByORM("varchar") },
{ name: "location", ...getTypeByORM("varchar") },
{ name: "commissioned", ...getTypeByORM("date") },
{ name: "decommissioned", ...getTypeByORM("date", true), default: getDefaultByORM("null") },
{ name: "equipmentTypeId", ...getTypeByORM("uuid") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["equipmentTypeId"],
referencedColumnNames: ["id"],
referencedTableName: "equipment_type",
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
}),
],
});
export const equipment_type_table = new Table({
name: "equipment_type",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "type", ...getTypeByORM("varchar"), isUnique: true },
{ name: "description", ...getTypeByORM("text") },
],
});
export const vehicle_table = new Table({
name: "vehicle",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "code", ...getTypeByORM("varchar", true), default: getDefaultByORM("null"), isUnique: true },
{ name: "name", ...getTypeByORM("varchar") },
{ name: "location", ...getTypeByORM("varchar") },
{ name: "commissioned", ...getTypeByORM("date") },
{ name: "decommissioned", ...getTypeByORM("date", true), default: getDefaultByORM("null") },
{ name: "vehicleTypeId", ...getTypeByORM("uuid") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["vehicleTypeId"],
referencedColumnNames: ["id"],
referencedTableName: "vehicle_type",
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
}),
],
});
export const vehicle_type_table = new Table({
name: "vehicle_type",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "type", ...getTypeByORM("varchar"), isUnique: true },
{ name: "description", ...getTypeByORM("text") },
],
});
export const wearable_table = new Table({
name: "wearable",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "code", ...getTypeByORM("varchar", true), default: getDefaultByORM("null"), isUnique: true },
{ name: "name", ...getTypeByORM("varchar") },
{ name: "location", ...getTypeByORM("varchar") },
{ name: "commissioned", ...getTypeByORM("date") },
{ name: "decommissioned", ...getTypeByORM("date", true), default: getDefaultByORM("null") },
{ name: "wearableTypeId", ...getTypeByORM("uuid") },
{ name: "wearerId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["wearableTypeId"],
referencedColumnNames: ["id"],
referencedTableName: "wearable_type",
onDelete: "RESTRICT",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["wearerId"],
referencedColumnNames: ["id"],
referencedTableName: "member",
onDelete: "SET NULL",
onUpdate: "RESTRICT",
}),
],
});
export const wearable_type_table = new Table({
name: "wearable_type",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "type", ...getTypeByORM("varchar"), isUnique: true },
{ name: "description", ...getTypeByORM("text") },
],
});

View file

@ -0,0 +1,39 @@
import { Table, TableForeignKey } from "typeorm";
import { getTypeByORM, isUUIDPrimary, getDefaultByORM } from "../ormHelper";
export const damage_report_table = new Table({
name: "damage_report",
columns: [
{ name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary },
{ name: "reportedAt", ...getTypeByORM("date"), default: getDefaultByORM("currentTimestamp") },
{ name: "status", ...getTypeByORM("varchar") },
{ name: "done", ...getTypeByORM("boolean"), default: getDefaultByORM("boolean", false) },
{ name: "description", ...getTypeByORM("text") },
{ name: "equipmentId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
{ name: "vehicleId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
{ name: "wearableId", ...getTypeByORM("uuid", true), default: getDefaultByORM("null") },
],
foreignKeys: [
new TableForeignKey({
columnNames: ["equipmentId"],
referencedColumnNames: ["id"],
referencedTableName: "equipment",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["vehicleId"],
referencedColumnNames: ["id"],
referencedTableName: "vehicle",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
new TableForeignKey({
columnNames: ["wearableId"],
referencedColumnNames: ["id"],
referencedTableName: "wearable",
onDelete: "CASCADE",
onUpdate: "RESTRICT",
}),
],
});