import type { EntityManager } from '@mikro-orm/core'; import { PaymentMethod } from '../modules/payments/entities/payment-method.entity'; import type { Restaurant } from '../modules/restaurants/entities/restaurant.entity'; import { paymentMethodsData } from './data/payment-methods.data'; export class PaymentMethodsSeeder { async run(em: EntityManager, restaurants: Restaurant[]): Promise { for (const restaurant of restaurants) { if (!restaurant) continue; for (const methodData of paymentMethodsData) { const existing = await em.findOne(PaymentMethod, { restaurant: { id: restaurant.id }, method: methodData.method, }); if (!existing) { const paymentMethod = em.create(PaymentMethod, { restaurant, method: methodData.method, description: methodData.description, enabled: methodData.enabled, order: methodData.order, gateway: methodData.gateway, cardNumber: methodData.cardNumber, cardNumber2: methodData.cardNumber2, cardNumber3: methodData.cardNumber3, cardOwner: methodData.cardOwner, cardOwner2: methodData.cardOwner2, cardOwner3: methodData.cardOwner3, merchantId: methodData.merchantId, }); em.persist(paymentMethod); } else { // Update existing payment method if needed if ( existing.description !== methodData.description || existing.enabled !== methodData.enabled || existing.order !== methodData.order || existing.cardNumber !== methodData.cardNumber || existing.cardNumber2 !== methodData.cardNumber2 || existing.cardNumber3 !== methodData.cardNumber3 || existing.cardOwner !== methodData.cardOwner || existing.cardOwner2 !== methodData.cardOwner2 || existing.cardOwner3 !== methodData.cardOwner3 ) { existing.description = methodData.description; existing.enabled = methodData.enabled; existing.order = methodData.order; if (methodData.gateway !== undefined) { existing.gateway = methodData.gateway; } if (methodData.cardNumber !== undefined) { existing.cardNumber = methodData.cardNumber; } if (methodData.cardNumber2 !== undefined) { existing.cardNumber2 = methodData.cardNumber2; } if (methodData.cardNumber3 !== undefined) { existing.cardNumber3 = methodData.cardNumber3; } if (methodData.cardOwner !== undefined) { existing.cardOwner = methodData.cardOwner; } if (methodData.cardOwner2 !== undefined) { existing.cardOwner2 = methodData.cardOwner2; } if (methodData.cardOwner3 !== undefined) { existing.cardOwner3 = methodData.cardOwner3; } if (methodData.merchantId !== undefined) { existing.merchantId = methodData.merchantId; } em.persist(existing); } } } } await em.flush(); } }