2026-10-10 09:41:42 +00:00
|
|
|
import type { Sequelize } from "sequelize";
|
|
|
|
|
import { DataTypes, QueryTypes } from "sequelize";
|
|
|
|
|
|
2026-10-10 15:57:05 +00:00
|
|
|
import { inventoryColumns, specificationColumns } from "./asset-relational-schema";
|
2026-10-09 23:37:10 +00:00
|
|
|
|
2026-10-04 16:36:09 +00:00
|
|
|
const id = { type: DataTypes.UUID, primaryKey: true };
|
2026-10-10 10:01:58 +00:00
|
|
|
|
2026-10-04 16:36:09 +00:00
|
|
|
const fk = (model: string, nullable = false) => ({
|
|
|
|
|
type: DataTypes.UUID,
|
|
|
|
|
allowNull: nullable,
|
|
|
|
|
references: { model, key: "id" },
|
|
|
|
|
onDelete: "RESTRICT",
|
|
|
|
|
});
|
2026-10-09 23:37:10 +00:00
|
|
|
|
2026-10-04 16:36:09 +00:00
|
|
|
export async function migrateInventory(database: Sequelize) {
|
|
|
|
|
const query = database.getQueryInterface();
|
|
|
|
|
const tables = await database.query<{ name: string }>(
|
|
|
|
|
"SELECT TABLE_NAME AS name FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()",
|
|
|
|
|
{ type: QueryTypes.SELECT }
|
|
|
|
|
);
|
|
|
|
|
const asset = {
|
|
|
|
|
id,
|
|
|
|
|
companyId: fk("companies"),
|
|
|
|
|
templateId: fk("asset_definitions"),
|
|
|
|
|
siteId: fk("company_sites", true),
|
2026-10-07 16:08:48 +00:00
|
|
|
brandId: fk("asset_brands", true),
|
2026-10-10 09:41:42 +00:00
|
|
|
...inventoryColumns,
|
|
|
|
|
...specificationColumns,
|
2026-10-04 16:36:09 +00:00
|
|
|
};
|
|
|
|
|
const revision = {
|
|
|
|
|
id,
|
|
|
|
|
assetId: fk("assets"),
|
|
|
|
|
actorId: fk("users"),
|
|
|
|
|
siteId: fk("company_sites", true),
|
2026-10-07 16:08:48 +00:00
|
|
|
brandId: fk("asset_brands", true),
|
2026-10-04 16:36:09 +00:00
|
|
|
recordedAt: { type: DataTypes.STRING(30), allowNull: false },
|
2026-10-10 09:41:42 +00:00
|
|
|
...inventoryColumns,
|
|
|
|
|
templateId: fk("asset_definitions"),
|
2026-10-04 16:36:09 +00:00
|
|
|
position: { type: DataTypes.INTEGER, allowNull: false },
|
|
|
|
|
};
|
2026-10-10 10:01:58 +00:00
|
|
|
|
2026-10-04 16:36:09 +00:00
|
|
|
if (!tables.some((table) => table.name === "assets")) {
|
|
|
|
|
await query.createTable("assets", asset);
|
|
|
|
|
}
|
|
|
|
|
if (!tables.some((table) => table.name === "asset_revisions")) {
|
|
|
|
|
await query.createTable("asset_revisions", revision);
|
|
|
|
|
}
|
2026-10-09 23:37:10 +00:00
|
|
|
}
|