/opt/mawid/packages/db/prisma
Edit: /opt/mawid/packages/db/prisma/seed.ts (3772B)
import { PrismaClient } from '@prisma/client';
import * as argon2 from 'argon2';
const prisma = new PrismaClient();
const WEEKDAY_HOURS = {
mon: [{ start: '09:00', end: '18:00' }],
tue: [{ start: '09:00', end: '18:00' }],
wed: [{ start: '09:00', end: '18:00' }],
thu: [{ start: '09:00', end: '18:00' }],
fri: [{ start: '09:00', end: '18:00' }],
sat: [{ start: '10:00', end: '15:00' }],
sun: [],
};
async function main() {
const existing = await prisma.clinic.findFirst({ where: { name: 'Demo Dental Clinic' } });
if (existing) {
if (!existing.waPhoneNumberId) {
await prisma.clinic.update({
where: { id: existing.id },
data: { waPhoneNumberId: 'test-phone-number-id' },
});
console.log('Seed already applied; backfilled waPhoneNumberId.');
} else {
console.log('Seed already applied, skipping.');
}
return;
}
const clinic = await prisma.clinic.create({
data: {
name: 'Demo Dental Clinic',
phone: '+905550000001',
waPhoneNumberId: 'test-phone-number-id',
timezone: 'Europe/Istanbul',
defaultLanguage: 'tr',
workingHours: WEEKDAY_HOURS,
settings: { reminderOffsetsHours: [24, 2], depositEnabled: false, waitlistHoldMinutes: 20 },
},
});
await prisma.user.create({
data: {
clinicId: clinic.id,
email: 'owner@demo.clinic',
// Password: demo-owner-password
passwordHash: await argon2.hash('demo-owner-password'),
name: 'Demo Owner',
role: 'owner',
},
});
const services = await Promise.all(
[
{ ar: 'فحص وتنظيف', tr: 'Muayene ve temizlik', en: 'Checkup & cleaning', min: 30, price: 1200 },
{ ar: 'حشو أسنان', tr: 'Dolgu', en: 'Filling', min: 45, price: 1800 },
{ ar: 'تبييض الأسنان', tr: 'Diş beyazlatma', en: 'Teeth whitening', min: 60, price: 4500 },
{ ar: 'استشارة زراعة', tr: 'İmplant danışma', en: 'Implant consultation', min: 30, price: 0 },
].map((s) =>
prisma.service.create({
data: {
clinicId: clinic.id,
name: { ar: s.ar, tr: s.tr, en: s.en },
durationMinutes: s.min,
price: s.price,
},
}),
),
);
await Promise.all(
[
{ name: 'Dr. Elif Yılmaz', role: 'dentist' },
{ name: 'Dr. Kerem Aydın', role: 'dentist' },
].map((s) =>
prisma.staff.create({
data: {
clinicId: clinic.id,
name: s.name,
role: s.role,
workingHours: WEEKDAY_HOURS,
services: { connect: services.map(({ id }) => ({ id })) },
},
}),
),
);
const patients = [
{ waPhone: '+905321110001', name: 'Ahmet Demir', language: 'tr' },
{ waPhone: '+905321110002', name: 'Zeynep Kaya', language: 'tr' },
{ waPhone: '+905321110003', name: 'محمد الحسن', language: 'ar' },
{ waPhone: '+905321110004', name: 'ليلى العلي', language: 'ar' },
{ waPhone: '+905321110005', name: 'Murat Şahin', language: 'tr' },
{ waPhone: '+905321110006', name: 'Elena Petrova', language: 'en' },
{ waPhone: '+905321110007', name: 'سارة يوسف', language: 'ar' },
{ waPhone: '+905321110008', name: 'Deniz Arslan', language: 'tr' },
{ waPhone: '+905321110009', name: 'John Carter', language: 'en' },
{ waPhone: '+905321110010', name: 'Fatma Çelik', language: 'tr' },
];
await prisma.patient.createMany({
data: patients.map((p) => ({ ...p, clinicId: clinic.id })),
});
console.log(
`Seeded clinic ${clinic.id}: 1 owner, 2 staff, ${services.length} services, ${patients.length} patients.`,
);
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(() => prisma.$disconnect());