This repository has been archived on 2026-04-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

79 lines
2.6 KiB
SQL

-- Create constructeurs table
CREATE TABLE "constructeurs" (
"id" TEXT PRIMARY KEY,
"name" TEXT NOT NULL,
"email" TEXT,
"phone" TEXT,
"createdAt" TIMESTAMP NOT NULL DEFAULT NOW(),
"updatedAt" TIMESTAMP NOT NULL DEFAULT NOW()
);
CREATE UNIQUE INDEX "constructeurs_name_unique_idx" ON "constructeurs"(LOWER("name"));
-- Add foreign key columns to machines, composants, pieces
ALTER TABLE "machines" ADD COLUMN "constructeurId" TEXT;
ALTER TABLE "composants" ADD COLUMN "constructeurId" TEXT;
ALTER TABLE "pieces" ADD COLUMN "constructeurId" TEXT;
-- Populate constructeurs from existing data
WITH existing_names AS (
SELECT DISTINCT TRIM(constructeur) AS name FROM "machines" WHERE constructeur IS NOT NULL AND TRIM(constructeur) <> ''
UNION
SELECT DISTINCT TRIM(constructeur) FROM "composants" WHERE constructeur IS NOT NULL AND TRIM(constructeur) <> ''
UNION
SELECT DISTINCT TRIM(constructeur) FROM "pieces" WHERE constructeur IS NOT NULL AND TRIM(constructeur) <> ''
),
prepared AS (
SELECT DISTINCT ON (LOWER(name)) name
FROM existing_names
WHERE name IS NOT NULL AND name <> ''
ORDER BY LOWER(name), name
)
INSERT INTO "constructeurs" ("id", "name")
SELECT substr(md5(random()::text || clock_timestamp()::text), 1, 25), name
FROM prepared
ON CONFLICT (LOWER("name")) DO NOTHING;
-- Link existing records to constructeurs
UPDATE "machines" m
SET "constructeurId" = c.id
FROM "constructeurs" c
WHERE m.constructeur IS NOT NULL
AND TRIM(m.constructeur) <> ''
AND LOWER(c.name) = LOWER(TRIM(m.constructeur));
UPDATE "composants" co
SET "constructeurId" = c.id
FROM "constructeurs" c
WHERE co.constructeur IS NOT NULL
AND TRIM(co.constructeur) <> ''
AND LOWER(c.name) = LOWER(TRIM(co.constructeur));
UPDATE "pieces" p
SET "constructeurId" = c.id
FROM "constructeurs" c
WHERE p.constructeur IS NOT NULL
AND TRIM(p.constructeur) <> ''
AND LOWER(c.name) = LOWER(TRIM(p.constructeur));
-- Drop legacy constructeur columns
ALTER TABLE "machines" DROP COLUMN "constructeur";
ALTER TABLE "composants" DROP COLUMN "constructeur";
ALTER TABLE "pieces" DROP COLUMN "constructeur";
-- Add foreign key constraints
ALTER TABLE "machines"
ADD CONSTRAINT "machines_constructeurId_fkey"
FOREIGN KEY ("constructeurId") REFERENCES "constructeurs"("id")
ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE "composants"
ADD CONSTRAINT "composants_constructeurId_fkey"
FOREIGN KEY ("constructeurId") REFERENCES "constructeurs"("id")
ON DELETE SET NULL ON UPDATE CASCADE;
ALTER TABLE "pieces"
ADD CONSTRAINT "pieces_constructeurId_fkey"
FOREIGN KEY ("constructeurId") REFERENCES "constructeurs"("id")
ON DELETE SET NULL ON UPDATE CASCADE;