From 8415cbb2de2c8cb3544f7858ee51ec1388d1b1b8 Mon Sep 17 00:00:00 2001 From: Asep Haryana Saputra <90584806+MythEclipse@users.noreply.github.com> Date: Fri, 22 May 2026 18:54:23 +0000 Subject: [PATCH] feat: add database seeding script for disease catalog and expert user --- apps/api/package.json | 1 + apps/api/src/db/seed.ts | 54 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 apps/api/src/db/seed.ts diff --git a/apps/api/package.json b/apps/api/package.json index 0dbd6a8..4d6beee 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -7,6 +7,7 @@ "dev": "bun --env-file=../../.env --watch src/index.ts", "start": "bun --env-file=../../.env src/index.ts", "typecheck": "tsc --project tsconfig.json", + "db:seed": "bun --env-file=../../.env src/db/seed.ts", "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate" }, diff --git a/apps/api/src/db/seed.ts b/apps/api/src/db/seed.ts new file mode 100644 index 0000000..57f871b --- /dev/null +++ b/apps/api/src/db/seed.ts @@ -0,0 +1,54 @@ +import { eq } from 'drizzle-orm'; +import { createDbClient } from './client'; +import { diseaseCatalog, users } from './schema'; +import { demoExpertUser, diseaseCatalogRows } from './seed-data'; +import { hashPassword } from '../lib/auth'; + +const db = createDbClient(); + +await db + .insert(diseaseCatalog) + .values(diseaseCatalogRows) + .onConflictDoUpdate({ + target: diseaseCatalog.slug, + set: { + label: diseaseCatalog.label, + commonName: diseaseCatalog.commonName, + summary: diseaseCatalog.summary, + description: diseaseCatalog.description, + symptoms: diseaseCatalog.symptoms, + recommendations: diseaseCatalog.recommendations, + riskLevel: diseaseCatalog.riskLevel, + accentColor: diseaseCatalog.accentColor, + displayOrder: diseaseCatalog.displayOrder, + updatedAt: new Date(), + }, + }); + +const passwordHash = await hashPassword(demoExpertUser.password); +const existingExpert = await db + .select({ id: users.id }) + .from(users) + .where(eq(users.email, demoExpertUser.email)) + .limit(1); + +if (existingExpert[0]) { + await db + .update(users) + .set({ + name: demoExpertUser.name, + role: demoExpertUser.role, + passwordHash, + updatedAt: new Date(), + }) + .where(eq(users.email, demoExpertUser.email)); +} else { + await db.insert(users).values({ + email: demoExpertUser.email, + name: demoExpertUser.name, + role: demoExpertUser.role, + passwordHash, + }); +} + +console.log(`Seeded ${diseaseCatalogRows.length} disease catalog rows and expert user ${demoExpertUser.email}`);