diff --git a/package.json b/package.json index 736aebf..317aed1 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "tsx watch src/index.ts", "build": "prisma generate && tsc", "start": "prisma migrate deploy && node dist/index.js", - "prisma:migrate": "prisma migrate dev" + "prisma:migrate": "prisma migrate dev", + "seed:demo": "tsx scripts/seed-demo.ts" }, "dependencies": { "@fastify/cors": "^11.2.0", diff --git a/scripts/seed-demo.ts b/scripts/seed-demo.ts new file mode 100644 index 0000000..1b6478b --- /dev/null +++ b/scripts/seed-demo.ts @@ -0,0 +1,73 @@ +import { prisma } from '../src/db.js' + +function requiredEnv(name: string): string { + const value = process.env[name]?.trim() + if (!value) throw new Error(`${name} is required`) + return value +} + +const logtoId = requiredEnv('DEMO_LOGTO_USER_ID') +const accountUuid = '99999999-1111-4111-8111-111111111111' +const serviceAccountUuid = '99999999-2222-4111-8111-111111111111' + +await prisma.account.upsert({ + where: { uuid: accountUuid }, + create: { + uuid: accountUuid, + name: `Demo user ${logtoId}`, + accountType: 'USER', + description: 'Demo seed user account', + }, + update: { + name: `Demo user ${logtoId}`, + accountType: 'USER', + description: 'Demo seed user account', + }, +}) + +await prisma.account.upsert({ + where: { uuid: serviceAccountUuid }, + create: { + uuid: serviceAccountUuid, + name: 'Demo logistics service', + accountType: 'SERVICE', + description: 'Demo seed service account', + serviceInfo: { + create: { slug: 'demo-logistics' }, + }, + }, + update: { + name: 'Demo logistics service', + accountType: 'SERVICE', + description: 'Demo seed service account', + }, +}) + +await prisma.serviceAccount.upsert({ + where: { slug: 'demo-logistics' }, + create: { + slug: 'demo-logistics', + accountUuid: serviceAccountUuid, + }, + update: { + accountUuid: serviceAccountUuid, + }, +}) + +const operations = [ + { code: 1001, name: 'demo.order.created', description: 'Demo order created' }, + { code: 1002, name: 'demo.order.paid', description: 'Demo order paid' }, + { code: 1003, name: 'demo.order.delivered', description: 'Demo order delivered' }, +] + +for (const operation of operations) { + await prisma.operationCode.upsert({ + where: { code: operation.code }, + create: operation, + update: operation, + }) +} + +console.log(`Seeded billing demo data for ${logtoId}`) + +await prisma.$disconnect()