From 5d2721ff5470d92d2da3493bd598c9cf82713c5c Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Sun, 7 Jun 2026 10:43:12 +0700 Subject: [PATCH] Add demo seed command --- package.json | 3 +- scripts/seed-demo.ts | 117 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 scripts/seed-demo.ts diff --git a/package.json b/package.json index 8505bbd..b763ea5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "dev": "tsx watch src/index.ts", "build": "prisma generate && tsc", - "start": "prisma migrate deploy && node dist/index.js" + "start": "prisma migrate deploy && node dist/index.js", + "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..f544943 --- /dev/null +++ b/scripts/seed-demo.ts @@ -0,0 +1,117 @@ +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 teamName = process.env.DEMO_TEAM_NAME ?? 'Optovia Demo Client' +const email = process.env.DEMO_USER_EMAIL ?? 'demo@optovia.ru' +const phone = process.env.DEMO_USER_PHONE ?? '+79990000000' +const firstName = process.env.DEMO_USER_FIRST_NAME ?? 'Demo' +const lastName = process.env.DEMO_USER_LAST_NAME ?? 'Client' +const applicationUuid = '88888888-1111-4111-8111-111111111111' +const profileUuid = '88888888-2222-4111-8111-111111111111' + +const application = await prisma.kYCApplication.findUnique({ where: { uuid: applicationUuid } }) + +let detailsId = application?.objectId ?? null +if (detailsId === null) { + const details = await prisma.kYCDetailsRussia.create({ + data: { + companyName: teamName, + companyFullName: `LLC ${teamName}`, + inn: '7700000000', + kpp: '770001001', + ogrn: '1027700000000', + address: 'Demo legal address, Moscow', + bankName: 'Demo Bank', + bik: '044525225', + correspondentAccount: '30101810400000000225', + }, + }) + detailsId = details.id +} else { + await prisma.kYCDetailsRussia.update({ + where: { id: detailsId }, + data: { + companyName: teamName, + companyFullName: `LLC ${teamName}`, + inn: '7700000000', + kpp: '770001001', + ogrn: '1027700000000', + address: 'Demo legal address, Moscow', + bankName: 'Demo Bank', + bik: '044525225', + correspondentAccount: '30101810400000000225', + }, + }) +} + +await prisma.kYCApplication.upsert({ + where: { uuid: applicationUuid }, + create: { + uuid: applicationUuid, + userId: logtoId, + teamName, + countryCode: 'RU', + workflowStatus: 'approved', + score: 92, + contactPerson: `${firstName} ${lastName}`, + contactEmail: email, + contactPhone: phone, + objectId: detailsId, + approvedBy: logtoId, + approvedAt: new Date(), + }, + update: { + userId: logtoId, + teamName, + countryCode: 'RU', + workflowStatus: 'approved', + score: 92, + contactPerson: `${firstName} ${lastName}`, + contactEmail: email, + contactPhone: phone, + objectId: detailsId, + approvedBy: logtoId, + approvedAt: new Date(), + }, +}) + +await prisma.kYCProfile.upsert({ + where: { uuid: profileUuid }, + create: { + uuid: profileUuid, + userId: logtoId, + teamName, + countryCode: 'RU', + workflowStatus: 'approved', + score: 92, + contactPerson: `${firstName} ${lastName}`, + contactEmail: email, + contactPhone: phone, + objectId: detailsId, + approvedBy: logtoId, + approvedAt: new Date(), + }, + update: { + userId: logtoId, + teamName, + countryCode: 'RU', + workflowStatus: 'approved', + score: 92, + contactPerson: `${firstName} ${lastName}`, + contactEmail: email, + contactPhone: phone, + objectId: detailsId, + approvedBy: logtoId, + approvedAt: new Date(), + }, +}) + +console.log(`Seeded KYC demo data for ${logtoId}: application ${applicationUuid}`) + +await prisma.$disconnect()