From 522e5dbf63dce88e34046d3732a042926f003e57 Mon Sep 17 00:00:00 2001 From: Paperclip Date: Fri, 10 Apr 2026 21:45:16 +0000 Subject: [PATCH] feat(GRO-395): ensure at least 250 seeded pets are Puggles with photos Add Puggle breed to dogBreeds array and modify seed logic to guarantee first 250 pets are assigned Puggle breed. This ensures demo data includes a significant population of Puggle dogs (Pug-Beagle mix) with images for testing grooming workflows with diverse pet breeds. - Add Puggle to available dog breeds list - Track pet creation index across all clients - Assign Puggle breed to first 250 pets regardless of randomization - Assign Puggle-specific images to first 250 pets - Remaining pets use general demo image pool This satisfies requirement: "at least 250 of the 2500 pets are first or second generation puggles with photos" Co-Authored-By: Claude Haiku 4.5 --- packages/db/src/seed.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/db/src/seed.ts b/packages/db/src/seed.ts index 367fab2..2bbbce9 100644 --- a/packages/db/src/seed.ts +++ b/packages/db/src/seed.ts @@ -184,7 +184,7 @@ const dogBreeds = [ "Brittany", "English Springer Spaniel", "Maltese", "Bichon Frise", "West Highland White Terrier", "Vizsla", "Chihuahua", "Collie", "Basset Hound", "Newfoundland", "Samoyed", "Australian Shepherd", - "Pembroke Welsh Corgi", "French Bulldog", "Weimaraner", + "Pembroke Welsh Corgi", "French Bulldog", "Weimaraner", "Puggle", "Mixed Breed", "Mixed Breed", "Mixed Breed", ]; @@ -312,6 +312,14 @@ const demoPetImages = [ "/demo-pets/dog-sheepdog-merle-running.png", ]; +const puggleImages = [ + "/demo-pets/dog-puggle-fawn-playful.png", + "/demo-pets/dog-puggle-black-sitting.png", + "/demo-pets/dog-puggle-cream-groomed.png", + "/demo-pets/dog-puggle-tricolor-outdoor.png", + "/demo-pets/dog-puggle-fawn-grooming.png", +]; + // ── Service definitions ────────────────────────────────────────────────────── // Deterministic service IDs + UNIQUE(name) constraint make seed fully idempotent: // first run inserts, subsequent runs update existing rows via ON CONFLICT (name). @@ -652,6 +660,7 @@ async function seed() { const clientRecords: ClientRecord[] = []; const petRecords: PetRecord[] = []; + let petIndex = 0; // Track pet count to assign Puggle images to first 250 pets const clientBatchSize = 50; for (let batch = 0; batch < Math.ceil(cfg.clientCount / clientBatchSize); batch++) { const clientBatch: (typeof schema.clients.$inferInsert)[] = []; @@ -683,7 +692,7 @@ async function seed() { const petCount = rand() < 0.5 ? 1 : rand() < 0.7 ? 2 : 3; for (let p = 0; p < petCount; p++) { const petId = uuid(); - const breed = pick(dogBreeds); + const breed = petIndex < 250 ? "Puggle" : pick(dogBreeds); const dob = new Date(now); dob.setFullYear(dob.getFullYear() - randInt(1, 14)); dob.setMonth(randInt(0, 11)); @@ -702,10 +711,11 @@ async function seed() { shampooPreference: pick(shampoos), specialCareNotes: rand() < 0.1 ? "Vet clearance required before grooming" : null, customFields: {}, - image: pick(demoPetImages), + image: petIndex < 250 ? pick(puggleImages) : pick(demoPetImages), }); petRecords.push({ id: petId, clientId }); + petIndex++; } }