Files
psp_api/prisma/seed.ts
T
ahasani 11488093a7 Refactor Partner and POS models to replace 'serial' with 'serial_number' and update related services and DTOs
- Updated PartnerAccountQuotaAllocation model to change license relation.
- Refactored Pos model to replace 'serial' with 'serial_number' across all references.
- Modified BusinessActivitiesService to include license activation details in responses.
- Adjusted ComplexPosesService to reflect changes in the Pos model.
- Updated PartnerService to include a new method for updating partner profiles.
- Created UpdatePartnerProfileDto for partner profile updates.
- Added migration to drop 'serial' column and add unique 'serial_number' column in poses table.
2026-04-24 02:20:15 +03:30

429 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { PasswordUtil } from '@/common/utils/password.util'
import { generateTrackingCode } from '@/common/utils/tracking-code-generator.util'
import { GoodPricingModel, POSType, UnitType } from '@/generated/prisma/enums'
import { GoodCreateInput, GoodCreateManyInput } from '@/generated/prisma/models'
import { prisma } from '../src/lib/prisma'
async function main() {
const password = await PasswordUtil.hash('123456')
const adminUser = await prisma.admin.upsert({
where: {
mobile_number: '09120258156',
},
update: {},
create: {
first_name: 'عباس',
last_name: 'حسنی',
national_code: '0016022289',
mobile_number: '09120258156',
adminAccounts: {
create: {
account: {
create: {
username: 'superAdmin',
password,
type: 'ADMIN',
status: 'ACTIVE',
},
},
},
},
},
})
// ****************** GUILD Start ****************** //
const guilds = await prisma.guild.findMany()
if (!guilds.length) {
await prisma.guild.createMany({
data: [
{
name: 'طلا',
code: 'Gold',
},
{
name: 'میوه و تره‌بار',
code: 'Fruit',
},
],
})
}
// ****************** GUILD Good Categories Start ****************** //
const goldGuild = await prisma.guild.findFirst({
where: {
name: 'طلا',
},
})
const goldGuildId = goldGuild?.id
const goldGuildGoodCategories = await prisma.goodCategory.findMany({
where: {
guild_id: goldGuildId,
is_default_guild_good: true,
},
})
if (!goldGuildGoodCategories?.length) {
const categoryFactory = (name: string) => ({
name,
guild_id: goldGuildId,
is_default_guild_good: true,
})
await prisma.goodCategory.createMany({
data: [
categoryFactory('زیورآلات'),
categoryFactory('طلا'),
categoryFactory('سایر'),
categoryFactory('سکه'),
categoryFactory('شمش'),
categoryFactory('شمش'),
],
})
}
// ****************** GUILD Good Start ****************** //
const goodFactory = (
name: string,
categoryId: string,
pricingModel: GoodPricingModel,
unitType: UnitType,
): GoodCreateManyInput => ({
name,
category_id: categoryId,
pricing_model: pricingModel,
sku: '',
unit_type: unitType,
is_default_guild_good: true,
})
const zivarCategory = await prisma.goodCategory.findFirst({
where: {
name: 'زیورآلات',
},
})
if (zivarCategory) {
const zivarGoods = await prisma.good.count({
where: {
category_id: zivarCategory?.id,
},
})
if (!zivarGoods) {
const goodItems: GoodCreateManyInput[] = []
goodItems.push(
...[
goodFactory(
'آویز گردنبند طلا',
zivarCategory.id,
GoodPricingModel.GOLD,
UnitType.GRAM,
),
goodFactory('النگو', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM),
goodFactory('انگشتر', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM),
goodFactory('دست‌بند', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM),
goodFactory('زنجیر', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM),
goodFactory('سرویس', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM),
goodFactory('گوشواره', zivarCategory.id, GoodPricingModel.GOLD, UnitType.GRAM),
],
)
await prisma.good.createMany({ data: goodItems })
}
}
const goldCategory = await prisma.goodCategory.findFirst({
where: {
name: 'طلا',
},
})
if (goldCategory) {
const goldGoods = await prisma.good.count({
where: {
category_id: goldCategory?.id,
},
})
if (!goldGoods) {
const goodItems: GoodCreateInput[] = []
goodItems.push(
...[
goodFactory(
'طلای آب شده',
goldCategory.id,
GoodPricingModel.GOLD,
UnitType.GRAM,
),
goodFactory(
'طلای شکسته',
goldCategory.id,
GoodPricingModel.GOLD,
UnitType.GRAM,
),
goodFactory(
'طلای مستعمل',
goldCategory.id,
GoodPricingModel.GOLD,
UnitType.GRAM,
),
],
)
await prisma.good.createMany({ data: goodItems })
}
}
const coinCategory = await prisma.goodCategory.findFirst({
where: {
name: 'سکه',
},
})
if (coinCategory) {
const coinGoods = await prisma.good.count({
where: {
category_id: coinCategory?.id,
},
})
if (!coinGoods) {
const goodItems: GoodCreateInput[] = []
goodItems.push(
...[
goodFactory(
'مسکوکات خارجی',
coinCategory.id,
GoodPricingModel.STANDARD,
UnitType.COUNT,
),
goodFactory(
'مسکوکات داخلی (پارسیان)',
coinCategory.id,
GoodPricingModel.STANDARD,
UnitType.COUNT,
),
goodFactory(
'تمام بهار آزادی (طرح جدید)',
coinCategory.id,
GoodPricingModel.STANDARD,
UnitType.COUNT,
),
goodFactory(
'تمام بهار آزادی (طرح قدیم)',
coinCategory.id,
GoodPricingModel.STANDARD,
UnitType.COUNT,
),
],
)
await prisma.good.createMany({ data: goodItems })
}
}
const shemshCategory = await prisma.goodCategory.findFirst({
where: {
name: 'شمش',
},
})
if (shemshCategory) {
const shemshGoods = await prisma.good.count({
where: {
category_id: shemshCategory?.id,
},
})
if (!shemshGoods) {
await prisma.good.create({
data: goodFactory(
'شمش استاندارد',
shemshCategory.id,
GoodPricingModel.GOLD,
UnitType.GRAM,
),
})
}
}
// ****************** partner Start ****************** //
let partner = await prisma.partner.findFirst()
let license = await prisma.license.findFirst()
if (!partner) {
partner = await prisma.partner.create({
data: {
name: 'تیس',
code: 'TIS',
status: 'ACTIVE',
partner_accounts: {
create: {
role: 'OWNER',
account: {
create: {
username: 'tis',
password: await PasswordUtil.hash('123456'),
status: 'ACTIVE',
type: 'PARTNER',
},
},
},
},
},
})
}
if (partner && !license) {
await prisma.$transaction(async tx => {
const startOfToday = new Date()
startOfToday.setHours(0, 0, 0, 0)
const month = startOfToday.getMonth()
let year = startOfToday.getFullYear()
let expMonth = month + 3
if (expMonth > 11) {
expMonth = expMonth - 11
year = year + 1
}
startOfToday.setFullYear(year)
startOfToday.setMonth(expMonth)
const transaction = await tx.licenseChargeTransaction.create({
data: {
activation_expires_at: startOfToday,
purchased_count: 1,
tracking_code: generateTrackingCode('LIC', 6),
partner: {
connect: {
id: partner.id,
},
},
},
select: {
id: true,
},
})
if (transaction)
license = await tx.license.create({
data: {
charge_transaction: {
connect: {
id: transaction.id,
},
},
},
})
})
}
// ****************** BA Start ****************** //
const ba = await prisma.businessActivity.count()
if (!ba && license) {
const startOfToday = new Date()
startOfToday.setHours(0, 0, 0, 0)
let year = startOfToday.getFullYear()
let expYear = year + 1
// if (expMonth > 11) {
// expMonth = expMonth - 11
// year = year + 1
// }
startOfToday.setFullYear(expYear)
await prisma.businessActivity.create({
data: {
name: 'طلا فروشی',
economic_code: '0111111111',
license_activation: {
create: {
expires_at: startOfToday,
starts_at: new Date(),
license: {
connect: {
id: license.id,
},
},
},
},
consumer: {
create: {
first_name: 'محمد',
last_name: 'زرگر',
mobile_number: '09120258155',
national_code: '1234567890',
consumer_accounts: {
create: {
role: 'OWNER',
account: {
create: {
username: 'zargar',
password: await PasswordUtil.hash('123456'),
status: 'ACTIVE',
type: 'CONSUMER',
},
},
},
},
partner: {
connect: {
id: partner.id,
},
},
},
},
guild: {
connect: {
id: guilds[0].id,
},
},
complexes: {
create: {
name: 'فروشگاه طلای مرکزی',
address: 'تهران، خیابان جمهوری',
branch_code: '12332',
pos_list: {
create: {
name: 'لاین ۱',
pos_type: POSType.WEB,
status: 'ACTIVE',
},
},
},
},
},
})
}
// ****************** BA Start ****************** //
// ****************** provider Start ****************** //
const provider = await prisma.provider.count()
if (!provider) {
await prisma.provider.create({
data: {
name: 'توسن',
code: 'Tosan',
status: 'ACTIVE',
provider_accounts: {
create: {
role: 'OWNER',
account: {
create: {
username: 'tosan',
password: await PasswordUtil.hash('123456'),
status: 'ACTIVE',
type: 'PROVIDER',
},
},
},
},
},
})
}
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async e => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})