fix: corrige les associations constructeurs

This commit is contained in:
Matthieu
2025-10-28 16:37:06 +01:00
parent 4db64351b7
commit 635ea0e84e
17 changed files with 578 additions and 200 deletions

View File

@@ -0,0 +1,64 @@
-- Convert single constructeur relation to many-to-many for machines, composants et pièces
-- Machines → Constructeurs
ALTER TABLE "machines" DROP CONSTRAINT IF EXISTS "machines_constructeurId_fkey";
CREATE TABLE "_MachineConstructeurs" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_MachineConstructeurs_A_fkey" FOREIGN KEY ("A") REFERENCES "machines"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_MachineConstructeurs_B_fkey" FOREIGN KEY ("B") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE UNIQUE INDEX "_MachineConstructeurs_AB_unique" ON "_MachineConstructeurs"("A", "B");
CREATE INDEX "_MachineConstructeurs_B_index" ON "_MachineConstructeurs"("B");
INSERT INTO "_MachineConstructeurs" ("A", "B")
SELECT "id", "constructeurId"
FROM "machines"
WHERE "constructeurId" IS NOT NULL
ON CONFLICT DO NOTHING;
ALTER TABLE "machines" DROP COLUMN IF EXISTS "constructeurId";
-- Composants → Constructeurs
ALTER TABLE "composants" DROP CONSTRAINT IF EXISTS "composants_constructeurId_fkey";
CREATE TABLE "_ComposantConstructeurs" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_ComposantConstructeurs_A_fkey" FOREIGN KEY ("A") REFERENCES "composants"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_ComposantConstructeurs_B_fkey" FOREIGN KEY ("B") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE UNIQUE INDEX "_ComposantConstructeurs_AB_unique" ON "_ComposantConstructeurs"("A", "B");
CREATE INDEX "_ComposantConstructeurs_B_index" ON "_ComposantConstructeurs"("B");
INSERT INTO "_ComposantConstructeurs" ("A", "B")
SELECT "id", "constructeurId"
FROM "composants"
WHERE "constructeurId" IS NOT NULL
ON CONFLICT DO NOTHING;
ALTER TABLE "composants" DROP COLUMN IF EXISTS "constructeurId";
-- Pièces → Constructeurs
ALTER TABLE "pieces" DROP CONSTRAINT IF EXISTS "pieces_constructeurId_fkey";
CREATE TABLE "_PieceConstructeurs" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_PieceConstructeurs_A_fkey" FOREIGN KEY ("A") REFERENCES "pieces"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_PieceConstructeurs_B_fkey" FOREIGN KEY ("B") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE UNIQUE INDEX "_PieceConstructeurs_AB_unique" ON "_PieceConstructeurs"("A", "B");
CREATE INDEX "_PieceConstructeurs_B_index" ON "_PieceConstructeurs"("B");
INSERT INTO "_PieceConstructeurs" ("A", "B")
SELECT "id", "constructeurId"
FROM "pieces"
WHERE "constructeurId" IS NOT NULL
ON CONFLICT DO NOTHING;
ALTER TABLE "pieces" DROP COLUMN IF EXISTS "constructeurId";

View File

@@ -0,0 +1,66 @@
-- Fix the orientation of implicit many-to-many join tables between constructeurs
-- and machines/composants/pièces so that Prisma inserts target IDs into the
-- matching foreign key columns.
-- Machines ↔ Constructeurs
CREATE TABLE "_MachineConstructeurs_new" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_MachineConstructeurs_new_A_fkey" FOREIGN KEY ("A") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_MachineConstructeurs_new_B_fkey" FOREIGN KEY ("B") REFERENCES "machines"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO "_MachineConstructeurs_new" ("A", "B")
SELECT "B", "A"
FROM "_MachineConstructeurs";
DROP TABLE "_MachineConstructeurs";
ALTER TABLE "_MachineConstructeurs_new" RENAME TO "_MachineConstructeurs";
ALTER TABLE "_MachineConstructeurs" RENAME CONSTRAINT "_MachineConstructeurs_new_A_fkey" TO "_MachineConstructeurs_A_fkey";
ALTER TABLE "_MachineConstructeurs" RENAME CONSTRAINT "_MachineConstructeurs_new_B_fkey" TO "_MachineConstructeurs_B_fkey";
CREATE UNIQUE INDEX "_MachineConstructeurs_AB_unique" ON "_MachineConstructeurs"("A", "B");
CREATE INDEX "_MachineConstructeurs_B_index" ON "_MachineConstructeurs"("B");
-- Composants ↔ Constructeurs
CREATE TABLE "_ComposantConstructeurs_new" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_ComposantConstructeurs_new_A_fkey" FOREIGN KEY ("A") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_ComposantConstructeurs_new_B_fkey" FOREIGN KEY ("B") REFERENCES "composants"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO "_ComposantConstructeurs_new" ("A", "B")
SELECT "B", "A"
FROM "_ComposantConstructeurs";
DROP TABLE "_ComposantConstructeurs";
ALTER TABLE "_ComposantConstructeurs_new" RENAME TO "_ComposantConstructeurs";
ALTER TABLE "_ComposantConstructeurs" RENAME CONSTRAINT "_ComposantConstructeurs_new_A_fkey" TO "_ComposantConstructeurs_A_fkey";
ALTER TABLE "_ComposantConstructeurs" RENAME CONSTRAINT "_ComposantConstructeurs_new_B_fkey" TO "_ComposantConstructeurs_B_fkey";
CREATE UNIQUE INDEX "_ComposantConstructeurs_AB_unique" ON "_ComposantConstructeurs"("A", "B");
CREATE INDEX "_ComposantConstructeurs_B_index" ON "_ComposantConstructeurs"("B");
-- Pièces ↔ Constructeurs
CREATE TABLE "_PieceConstructeurs_new" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_PieceConstructeurs_new_A_fkey" FOREIGN KEY ("A") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_PieceConstructeurs_new_B_fkey" FOREIGN KEY ("B") REFERENCES "pieces"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO "_PieceConstructeurs_new" ("A", "B")
SELECT "B", "A"
FROM "_PieceConstructeurs";
DROP TABLE "_PieceConstructeurs";
ALTER TABLE "_PieceConstructeurs_new" RENAME TO "_PieceConstructeurs";
ALTER TABLE "_PieceConstructeurs" RENAME CONSTRAINT "_PieceConstructeurs_new_A_fkey" TO "_PieceConstructeurs_A_fkey";
ALTER TABLE "_PieceConstructeurs" RENAME CONSTRAINT "_PieceConstructeurs_new_B_fkey" TO "_PieceConstructeurs_B_fkey";
CREATE UNIQUE INDEX "_PieceConstructeurs_AB_unique" ON "_PieceConstructeurs"("A", "B");
CREATE INDEX "_PieceConstructeurs_B_index" ON "_PieceConstructeurs"("B");

View File

@@ -0,0 +1,45 @@
-- Restore the original orientation of the machine/composant ↔ constructeur
-- implicit join tables after the previous corrective migration, while keeping
-- the pièce ↔ constructeur table aligned with Prisma's expectations.
-- Machines ↔ Constructeurs must map column A → machine, B → constructeur
CREATE TABLE "_MachineConstructeurs_restored" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_MachineConstructeurs_restored_A_fkey" FOREIGN KEY ("A") REFERENCES "machines"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_MachineConstructeurs_restored_B_fkey" FOREIGN KEY ("B") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO "_MachineConstructeurs_restored" ("A", "B")
SELECT "B", "A"
FROM "_MachineConstructeurs";
DROP TABLE "_MachineConstructeurs";
ALTER TABLE "_MachineConstructeurs_restored" RENAME TO "_MachineConstructeurs";
ALTER TABLE "_MachineConstructeurs" RENAME CONSTRAINT "_MachineConstructeurs_restored_A_fkey" TO "_MachineConstructeurs_A_fkey";
ALTER TABLE "_MachineConstructeurs" RENAME CONSTRAINT "_MachineConstructeurs_restored_B_fkey" TO "_MachineConstructeurs_B_fkey";
CREATE UNIQUE INDEX "_MachineConstructeurs_AB_unique" ON "_MachineConstructeurs"("A", "B");
CREATE INDEX "_MachineConstructeurs_B_index" ON "_MachineConstructeurs"("B");
-- Composants ↔ Constructeurs must map column A → composant, B → constructeur
CREATE TABLE "_ComposantConstructeurs_restored" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_ComposantConstructeurs_restored_A_fkey" FOREIGN KEY ("A") REFERENCES "composants"("id") ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT "_ComposantConstructeurs_restored_B_fkey" FOREIGN KEY ("B") REFERENCES "constructeurs"("id") ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO "_ComposantConstructeurs_restored" ("A", "B")
SELECT "B", "A"
FROM "_ComposantConstructeurs";
DROP TABLE "_ComposantConstructeurs";
ALTER TABLE "_ComposantConstructeurs_restored" RENAME TO "_ComposantConstructeurs";
ALTER TABLE "_ComposantConstructeurs" RENAME CONSTRAINT "_ComposantConstructeurs_restored_A_fkey" TO "_ComposantConstructeurs_A_fkey";
ALTER TABLE "_ComposantConstructeurs" RENAME CONSTRAINT "_ComposantConstructeurs_restored_B_fkey" TO "_ComposantConstructeurs_B_fkey";
CREATE UNIQUE INDEX "_ComposantConstructeurs_AB_unique" ON "_ComposantConstructeurs"("A", "B");
CREATE INDEX "_ComposantConstructeurs_B_index" ON "_ComposantConstructeurs"("B");

View File

@@ -66,8 +66,7 @@ model Machine {
typeMachineId String?
typeMachine TypeMachine? @relation(fields: [typeMachineId], references: [id])
constructeurId String?
constructeur Constructeur? @relation(fields: [constructeurId], references: [id], onDelete: SetNull)
constructeurs Constructeur[] @relation("MachineConstructeurs")
componentLinks MachineComponentLink[]
pieceLinks MachinePieceLink[]
@@ -89,8 +88,7 @@ model Composant {
typeComposantId String?
typeComposant ModelType? @relation("ModelTypeComponentAssignments", fields: [typeComposantId], references: [id])
constructeurId String?
constructeur Constructeur? @relation(fields: [constructeurId], references: [id], onDelete: SetNull)
constructeurs Constructeur[] @relation("ComposantConstructeurs")
documents Document[] @relation("ComposantDocuments")
customFieldValues CustomFieldValue[] @relation("ComposantCustomFieldValues")
@@ -110,8 +108,7 @@ model Piece {
typePieceId String?
typePiece ModelType? @relation("ModelTypePieceAssignments", fields: [typePieceId], references: [id])
constructeurId String?
constructeur Constructeur? @relation(fields: [constructeurId], references: [id], onDelete: SetNull)
constructeurs Constructeur[] @relation("PieceConstructeurs")
documents Document[] @relation("PieceDocuments")
customFieldValues CustomFieldValue[] @relation("PieceCustomFieldValues")
@@ -197,9 +194,9 @@ model Constructeur {
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
machines Machine[]
composants Composant[]
pieces Piece[]
machines Machine[] @relation("MachineConstructeurs")
composants Composant[] @relation("ComposantConstructeurs")
pieces Piece[] @relation("PieceConstructeurs")
@@map("constructeurs")
}