diff --git a/scripts/src/seed.ts b/scripts/src/seed.ts index b618f7da..9a8595a1 100644 --- a/scripts/src/seed.ts +++ b/scripts/src/seed.ts @@ -282,51 +282,13 @@ async function main() { const beveragesCat = insertedCategories[0]; - // Create services - const services = [ - { - categoryId: beveragesCat?.id ?? null, - nameAr: "شاي", - nameEn: "Tea", - price: "0.00", - isAvailable: true, - sortOrder: 1, - }, - { - categoryId: beveragesCat?.id ?? null, - nameAr: "قهوة سعودي", - nameEn: "Saudi Coffee", - price: "0.00", - isAvailable: true, - sortOrder: 2, - }, - { - categoryId: beveragesCat?.id ?? null, - nameAr: "بلاك كوفي", - nameEn: "Black Coffee", - price: "0.00", - isAvailable: true, - sortOrder: 3, - }, - { - categoryId: beveragesCat?.id ?? null, - nameAr: "عصير طازج", - nameEn: "Fresh Juice", - price: "5.00", - isAvailable: true, - sortOrder: 5, - }, - ]; - - await db.insert(servicesTable).values(services).onConflictDoNothing({ target: servicesTable.nameEn }); - console.log("Services created"); - - // ----- Services: idempotent renames for existing rows ----- + // ----- Services: idempotent renames for legacy rows ----- // Older deployments seeded "Arabic Coffee" / "قهوة عربية" and - // "قهوة بلاك". We renamed them to "Saudi Coffee" / "قهوة سعودي" - // and "بلاك كوفي" respectively, and pointed the Saudi Coffee row - // at a clearer brown image. Apply once per row, never overwrite - // a value an admin has already changed. + // "قهوة بلاك". Rename them BEFORE the insert below so the insert's + // onConflictDoNothing (target: nameEn) sees the new "Saudi Coffee" + // name already present and skips it — avoiding a unique-constraint + // collision on services.name_en. Never overwrite an imageUrl that + // an admin has already customized. const existingServices = await db.select().from(servicesTable); const legacyArabicCoffee = existingServices.find( (s) => s.nameEn === "Arabic Coffee", @@ -355,6 +317,46 @@ async function main() { .where(eq(servicesTable.id, legacyBlackCoffee.id)); } + // Create services + const services = [ + { + categoryId: beveragesCat?.id ?? null, + nameAr: "شاي", + nameEn: "Tea", + price: "0.00", + isAvailable: true, + sortOrder: 1, + }, + { + categoryId: beveragesCat?.id ?? null, + nameAr: "قهوة سعودي", + nameEn: "Saudi Coffee", + imageUrl: "service-images/saudi-coffee.png", + price: "0.00", + isAvailable: true, + sortOrder: 2, + }, + { + categoryId: beveragesCat?.id ?? null, + nameAr: "بلاك كوفي", + nameEn: "Black Coffee", + price: "0.00", + isAvailable: true, + sortOrder: 3, + }, + { + categoryId: beveragesCat?.id ?? null, + nameAr: "عصير طازج", + nameEn: "Fresh Juice", + price: "5.00", + isAvailable: true, + sortOrder: 5, + }, + ]; + + await db.insert(servicesTable).values(services).onConflictDoNothing({ target: servicesTable.nameEn }); + console.log("Services created"); + // ----- Groups: idempotent migration ----- await db .insert(groupsTable)