Files
backend/prisma/migrations/20260804100000_category_slug/migration.sql
T

39 lines
1.2 KiB
SQL

-- AlterTable
ALTER TABLE "Category" ADD COLUMN "slug" TEXT;
-- Backfill from nameEn (latin slug). Keep unique with id suffix on collision.
UPDATE "Category" AS c
SET "slug" = lower(
regexp_replace(
regexp_replace(trim(c."nameEn"), '[^a-zA-Z0-9]+', '-', 'g'),
'(^-+|-+$)',
'',
'g'
)
);
UPDATE "Category"
SET "slug" = 'category'
WHERE "slug" IS NULL OR "slug" = '';
UPDATE "Category" AS c
SET "slug" = c."slug" || '-' || right(c."id", 4)
WHERE c."id" IN (
SELECT id FROM (
SELECT id, ROW_NUMBER() OVER (PARTITION BY slug ORDER BY "createdAt", id) AS rn
FROM "Category"
) d
WHERE rn > 1
);
ALTER TABLE "Category" ALTER COLUMN "slug" SET NOT NULL;
-- Prefer readable Persian-romanized top-level slugs
UPDATE "Category" SET "slug" = 'shirini' WHERE "nameFa" = 'شیرینی' AND "parentId" IS NULL;
UPDATE "Category" SET "slug" = 'cake' WHERE "nameFa" = 'کیک' AND "parentId" IS NULL;
UPDATE "Category" SET "slug" = 'shirini-tar' WHERE "nameFa" = 'شیرینی تر';
UPDATE "Category" SET "slug" = 'shirini-khoshk' WHERE "nameFa" = 'شیرینی خشک';
UPDATE "Category" SET "slug" = 'cream-cake' WHERE "nameFa" = 'کیک خامه';
CREATE UNIQUE INDEX "Category_slug_key" ON "Category"("slug");