seed
This commit is contained in:
@@ -10,6 +10,10 @@ export class CreateRestaurantDto {
|
||||
@IsString()
|
||||
slug!: string;
|
||||
|
||||
@ApiProperty({ example: 'zhivan.example.com', description: 'دامنه رستوران' })
|
||||
@IsString()
|
||||
domain!: string;
|
||||
|
||||
@ApiPropertyOptional({ example: 'https://example.com/logo.png', description: 'آدرس تصویر لوگو' })
|
||||
@IsOptional()
|
||||
@IsUrl()
|
||||
|
||||
@@ -10,7 +10,7 @@ import { Restaurant } from '../modules/restaurants/entities/restaurant.entity';
|
||||
import { User } from '../modules/users/entities/user.entity';
|
||||
import { Permission, PermissionTitles } from '../common/enums/permission.enum';
|
||||
import { PaymentMethod } from '../modules/payments/entities/payment-method.entity';
|
||||
import { RestaurantPaymentMethod } from '../modules/payments/entities/restaurant-payment-method.entity';
|
||||
import { PaymentMethodEnum, PaymentGatewayEnum } from '../modules/payments/interface/payment';
|
||||
import { Delivery } from '../modules/delivery/entities/delivery.entity';
|
||||
import { DeliveryName } from '../modules/delivery/interface/delivery';
|
||||
import { Schedule } from '../modules/restaurants/entities/schedule.entity';
|
||||
@@ -94,61 +94,7 @@ export class DatabaseSeeder extends Seeder {
|
||||
await em.findOne(Role, { name: 'accountant' });
|
||||
const superAdmin = await em.findOne(Role, { name: 'superAdmin' });
|
||||
|
||||
// 3. Create Payment Methods
|
||||
const paymentMethodsData = [
|
||||
{
|
||||
name: 'پرداخت در محل',
|
||||
keyName: 'payment-on-delivery',
|
||||
description: 'پرداخت در محل تحویل',
|
||||
isActive: true,
|
||||
order: 1,
|
||||
isOnline: false,
|
||||
},
|
||||
{
|
||||
name: 'نقدی',
|
||||
keyName: 'cash',
|
||||
description: 'پرداخت نقدی',
|
||||
isActive: true,
|
||||
order: 2,
|
||||
isOnline: false,
|
||||
},
|
||||
{
|
||||
name: 'زرینپال',
|
||||
keyName: 'zarinpal',
|
||||
description: 'درگاه پرداخت زرینپال',
|
||||
isActive: true,
|
||||
order: 3,
|
||||
isOnline: true,
|
||||
paymentUrl: 'https://www.zarinpal.com/pg/StartPay',
|
||||
},
|
||||
];
|
||||
|
||||
for (const methodData of paymentMethodsData) {
|
||||
let paymentMethod = await em.findOne(PaymentMethod, { keyName: methodData.keyName });
|
||||
if (!paymentMethod) {
|
||||
paymentMethod = em.create(PaymentMethod, methodData);
|
||||
em.persist(paymentMethod);
|
||||
} else {
|
||||
// Update existing payment method if needed
|
||||
if (
|
||||
paymentMethod.name !== methodData.name ||
|
||||
paymentMethod.description !== methodData.description ||
|
||||
paymentMethod.isOnline !== methodData.isOnline ||
|
||||
paymentMethod.order !== methodData.order
|
||||
) {
|
||||
paymentMethod.name = methodData.name;
|
||||
paymentMethod.description = methodData.description;
|
||||
paymentMethod.isOnline = methodData.isOnline;
|
||||
paymentMethod.order = methodData.order;
|
||||
if (methodData.paymentUrl) {
|
||||
paymentMethod.paymentUrl = methodData.paymentUrl;
|
||||
}
|
||||
em.persist(paymentMethod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await em.flush();
|
||||
// 3. Payment Methods will be created per restaurant (see section 5.5)
|
||||
|
||||
// 4. Delivery methods will be created per restaurant (see section 5.5.5)
|
||||
|
||||
@@ -158,6 +104,7 @@ export class DatabaseSeeder extends Seeder {
|
||||
const restaurant = em.create(Restaurant, {
|
||||
name: 'ژیوان',
|
||||
slug: 'zhivan',
|
||||
domain: 'zhivan.example.com',
|
||||
isActive: true,
|
||||
phone: '09123456789',
|
||||
serviceArea: {
|
||||
@@ -181,6 +128,7 @@ export class DatabaseSeeder extends Seeder {
|
||||
const restaurant = em.create(Restaurant, {
|
||||
name: 'بوته',
|
||||
slug: 'boote',
|
||||
domain: 'boote.example.com',
|
||||
isActive: true,
|
||||
phone: '09123456790',
|
||||
serviceArea: {
|
||||
@@ -205,26 +153,78 @@ export class DatabaseSeeder extends Seeder {
|
||||
const zhivan = await em.findOne(Restaurant, { slug: 'zhivan' });
|
||||
const boote = await em.findOne(Restaurant, { slug: 'boote' });
|
||||
|
||||
// 5.5. Create Restaurant Payment Methods
|
||||
// 5.5. Create Payment Methods for each Restaurant
|
||||
const allRestaurants = await em.find(Restaurant, {});
|
||||
const allPaymentMethods = await em.find(PaymentMethod, { isActive: true });
|
||||
|
||||
const paymentMethodsData = [
|
||||
{
|
||||
title: 'پرداخت در محل',
|
||||
method: PaymentMethodEnum.CardOnDelivery,
|
||||
description: 'پرداخت در محل تحویل',
|
||||
enabled: true,
|
||||
order: 1,
|
||||
gateway: null,
|
||||
},
|
||||
{
|
||||
title: 'نقدی',
|
||||
method: PaymentMethodEnum.Cash,
|
||||
description: 'پرداخت نقدی',
|
||||
enabled: true,
|
||||
order: 2,
|
||||
gateway: null,
|
||||
},
|
||||
{
|
||||
title: 'زرینپال',
|
||||
method: PaymentMethodEnum.Online,
|
||||
description: 'درگاه پرداخت زرینپال',
|
||||
enabled: true,
|
||||
order: 3,
|
||||
gateway: PaymentGatewayEnum.ZarinPal,
|
||||
merchantId: 'test-merchant-id',
|
||||
},
|
||||
];
|
||||
|
||||
for (const restaurant of allRestaurants) {
|
||||
if (!restaurant) continue;
|
||||
|
||||
for (const paymentMethod of allPaymentMethods) {
|
||||
const existing = await em.findOne(RestaurantPaymentMethod, {
|
||||
for (const methodData of paymentMethodsData) {
|
||||
const existing = await em.findOne(PaymentMethod, {
|
||||
restaurant: { id: restaurant.id },
|
||||
paymentMethod: { id: paymentMethod.id },
|
||||
method: methodData.method,
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
const restaurantPaymentMethod = em.create(RestaurantPaymentMethod, {
|
||||
const paymentMethod = em.create(PaymentMethod, {
|
||||
restaurant,
|
||||
paymentMethod,
|
||||
isActive: true,
|
||||
title: methodData.title,
|
||||
method: methodData.method,
|
||||
description: methodData.description,
|
||||
enabled: methodData.enabled,
|
||||
order: methodData.order,
|
||||
gateway: methodData.gateway,
|
||||
merchantId: methodData.merchantId,
|
||||
});
|
||||
em.persist(restaurantPaymentMethod);
|
||||
em.persist(paymentMethod);
|
||||
} else {
|
||||
// Update existing payment method if needed
|
||||
if (
|
||||
existing.title !== methodData.title ||
|
||||
existing.description !== methodData.description ||
|
||||
existing.enabled !== methodData.enabled ||
|
||||
existing.order !== methodData.order
|
||||
) {
|
||||
existing.title = methodData.title;
|
||||
existing.description = methodData.description;
|
||||
existing.enabled = methodData.enabled;
|
||||
existing.order = methodData.order;
|
||||
if (methodData.gateway !== undefined) {
|
||||
existing.gateway = methodData.gateway;
|
||||
}
|
||||
if (methodData.merchantId !== undefined) {
|
||||
existing.merchantId = methodData.merchantId;
|
||||
}
|
||||
em.persist(existing);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user