feat: add database seeding script for disease catalog and expert user
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
"dev": "bun --env-file=../../.env --watch src/index.ts",
|
"dev": "bun --env-file=../../.env --watch src/index.ts",
|
||||||
"start": "bun --env-file=../../.env src/index.ts",
|
"start": "bun --env-file=../../.env src/index.ts",
|
||||||
"typecheck": "tsc --project tsconfig.json",
|
"typecheck": "tsc --project tsconfig.json",
|
||||||
|
"db:seed": "bun --env-file=../../.env src/db/seed.ts",
|
||||||
"db:generate": "drizzle-kit generate",
|
"db:generate": "drizzle-kit generate",
|
||||||
"db:migrate": "drizzle-kit migrate"
|
"db:migrate": "drizzle-kit migrate"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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}`);
|
||||||
Reference in New Issue
Block a user