defmodule DaProductApp.Seeds.MerchantManagementSeeds do @moduledoc """ Seeds for testing the merchant management system. Creates sample partners and merchants for development and testing. """ alias DaProductApp.Repo alias DaProductApp.Partners.Partner alias DaProductApp.Merchants.Merchant def run do # Create sample partners partners = create_sample_partners() # Create sample merchants for each partner Enum.each(partners, &create_sample_merchants_for_partner/1) IO.puts("✅ Merchant management seeds completed!") end defp create_sample_partners do partners_data = [ %{ partner_code: "SINGAPORE_PARTNER_001", partner_name: "Singapore Payment Solutions", partner_type: "AGGREGATOR", corridor: "SINGAPORE", base_currency: "SGD", api_endpoint: "https://api.sg-payments.com/v1", commission_rate: Decimal.new("1.5"), status: "ACTIVE", contact_email: "integration@sg-payments.com", contact_phone: "+65-6123-4567", onboarded_at: DateTime.utc_now() }, %{ partner_code: "UAE_PARTNER_001", partner_name: "UAE Digital Payments", partner_type: "AGGREGATOR", corridor: "UAE", base_currency: "AED", api_endpoint: "https://api.uae-digital.com/v1", commission_rate: Decimal.new("2.0"), status: "ACTIVE", contact_email: "support@uae-digital.com", contact_phone: "+971-4-123-4567", onboarded_at: DateTime.utc_now() }, %{ partner_code: "USA_PARTNER_001", partner_name: "US Payment Gateway", partner_type: "PROCESSOR", corridor: "USA", base_currency: "USD", api_endpoint: "https://api.uspayments.com/v1", commission_rate: Decimal.new("2.5"), status: "ACTIVE", contact_email: "api@uspayments.com", contact_phone: "+1-555-123-4567", onboarded_at: DateTime.utc_now() }, %{ partner_code: "DOMESTIC_PARTNER_001", partner_name: "India Merchant Services", partner_type: "ACQUIRER", corridor: "DOMESTIC", base_currency: "INR", api_endpoint: "https://api.indiamerchant.com/v1", commission_rate: Decimal.new("1.0"), status: "ACTIVE", contact_email: "support@indiamerchant.com", contact_phone: "+91-80-1234-5678", onboarded_at: DateTime.utc_now() } ] Enum.map(partners_data, fn partner_attrs -> case Repo.get_by(Partner, partner_code: partner_attrs.partner_code) do nil -> partner = %Partner{} |> Partner.changeset(partner_attrs) |> Repo.insert!() IO.puts("✅ Created partner: #{partner.partner_name}") partner existing_partner -> IO.puts("⚠️ Partner already exists: #{existing_partner.partner_name}") existing_partner end end) end defp create_sample_merchants_for_partner(partner) do merchants_data = case partner.corridor do "SINGAPORE" -> singapore_merchants() "UAE" -> uae_merchants() "USA" -> usa_merchants() "DOMESTIC" -> domestic_merchants() end Enum.each(merchants_data, fn merchant_attrs -> attrs = Map.put(merchant_attrs, :partner_id, partner.id) case Repo.get_by(Merchant, merchant_code: merchant_attrs.merchant_code) do nil -> %Merchant{} |> Merchant.changeset(attrs) |> Repo.insert!() |> tap(fn merchant -> IO.puts("✅ Created merchant: #{merchant.brand_name} (#{merchant.merchant_code})") end) existing_merchant -> IO.puts("⚠️ Merchant already exists: #{existing_merchant.brand_name}") end end) end defp singapore_merchants do [ %{ merchant_code: "SG_COFFEE_001", mid: "SGCOF001", tid: "T001", sid: "S001", brand_name: "Singapore Coffee House", legal_name: "Singapore Coffee House Pte Ltd", merchant_vpa: "coffeehouse@sgpayments", business_type: "RETAIL", business_category: "5814", merchant_type: "SMALL", merchant_genre: "RETAIL", corridor: "SINGAPORE", local_currency: "SGD", country_code: "SG", max_transaction_limit: Decimal.new("5000.00"), daily_transaction_limit: Decimal.new("50000.00"), settlement_frequency: "T+1", settlement_account_number: "123456789", settlement_account_ifsc: "SGBK0001234", contact_email: "payments@sgcoffee.com", contact_phone: "+65-6234-5678", address: "123 Orchard Road", city: "Singapore", state: "Singapore", pincode: "238123", compliance_status: "VERIFIED", risk_category: "LOW", status: "ACTIVE", onboarded_at: DateTime.utc_now() }, %{ merchant_code: "SG_RETAIL_002", mid: "SGRET002", tid: "T002", sid: "S002", brand_name: "Singapore Electronics Store", legal_name: "SG Electronics Pte Ltd", merchant_vpa: "electronics@sgpayments", business_type: "RETAIL", business_category: "5732", merchant_type: "MEDIUM", merchant_genre: "RETAIL", corridor: "SINGAPORE", local_currency: "SGD", country_code: "SG", max_transaction_limit: Decimal.new("20000.00"), daily_transaction_limit: Decimal.new("200000.00"), settlement_frequency: "T+0", settlement_account_number: "987654321", settlement_account_ifsc: "SGBK0009876", contact_email: "billing@sgelec.com", contact_phone: "+65-6345-6789", address: "456 Marina Bay", city: "Singapore", state: "Singapore", pincode: "018956", compliance_status: "VERIFIED", risk_category: "MEDIUM", status: "ACTIVE", onboarded_at: DateTime.utc_now() } ] end defp uae_merchants do [ %{ merchant_code: "AE_REST_001", mid: "AEREST001", tid: "T001", sid: "S001", brand_name: "Dubai Fine Dining", legal_name: "Dubai Fine Dining LLC", merchant_vpa: "restaurant@uaepay", business_type: "SERVICES", business_category: "5812", merchant_type: "MEDIUM", merchant_genre: "RETAIL", corridor: "UAE", local_currency: "AED", country_code: "AE", max_transaction_limit: Decimal.new("15000.00"), daily_transaction_limit: Decimal.new("150000.00"), settlement_frequency: "T+1", settlement_account_number: "AE123456789", settlement_account_ifsc: "AEBK0001234", contact_email: "payments@dubaifine.ae", contact_phone: "+971-4-234-5678", address: "Sheikh Zayed Road", city: "Dubai", state: "Dubai", pincode: "000000", compliance_status: "VERIFIED", risk_category: "MEDIUM", status: "ACTIVE", onboarded_at: DateTime.utc_now() } ] end defp usa_merchants do [ %{ merchant_code: "US_TECH_001", mid: "USTECH001", tid: "T001", sid: "S001", brand_name: "Silicon Valley Tech Store", legal_name: "SV Tech Store Inc", merchant_vpa: "techstore@uspay", business_type: "ECOMMERCE", business_category: "5045", merchant_type: "LARGE", merchant_genre: "ONLINE", corridor: "USA", local_currency: "USD", country_code: "US", max_transaction_limit: Decimal.new("50000.00"), daily_transaction_limit: Decimal.new("500000.00"), settlement_frequency: "T+0", settlement_account_number: "US123456789", settlement_account_ifsc: "USBK0001234", contact_email: "billing@svtech.com", contact_phone: "+1-555-234-5678", address: "1234 Technology Drive", city: "San Francisco", state: "California", pincode: "941050", compliance_status: "VERIFIED", risk_category: "LOW", status: "ACTIVE", onboarded_at: DateTime.utc_now() } ] end defp domestic_merchants do [ %{ merchant_code: "IN_GROCERY_001", mid: "INGROC001", tid: "T001", sid: "S001", brand_name: "Mumbai Grocery Mart", legal_name: "Mumbai Grocery Mart Pvt Ltd", merchant_vpa: "grocery@indiapay", business_type: "RETAIL", business_category: "5411", merchant_type: "SMALL", merchant_genre: "RETAIL", corridor: "DOMESTIC", local_currency: "INR", country_code: "IN", max_transaction_limit: Decimal.new("25000.00"), daily_transaction_limit: Decimal.new("100000.00"), settlement_frequency: "T+1", settlement_account_number: "123456789012", settlement_account_ifsc: "SBIN0001234", contact_email: "payments@mumbaigrocer.in", contact_phone: "+91-98765-43210", address: "123 Commercial Street", city: "Mumbai", state: "Maharashtra", pincode: "400001", gstin: "27ABCDE1234F1Z5", pan: "ABCDE1234F", compliance_status: "VERIFIED", risk_category: "LOW", status: "ACTIVE", onboarded_at: DateTime.utc_now() }, %{ merchant_code: "IN_PHARMA_002", mid: "INPHAR002", tid: "T002", sid: "S002", brand_name: "Bangalore Health Pharmacy", legal_name: "Bangalore Health Pharmacy Pvt Ltd", merchant_vpa: "pharmacy@indiapay", business_type: "RETAIL", business_category: "5912", merchant_type: "MEDIUM", merchant_genre: "RETAIL", corridor: "DOMESTIC", local_currency: "INR", country_code: "IN", max_transaction_limit: Decimal.new("50000.00"), daily_transaction_limit: Decimal.new("200000.00"), settlement_frequency: "T+0", settlement_account_number: "987654321098", settlement_account_ifsc: "HDFC0001234", contact_email: "billing@blrhealth.in", contact_phone: "+91-80-1234-5678", address: "456 MG Road", city: "Bangalore", state: "Karnataka", pincode: "560001", gstin: "29FGHIJ5678K1Z5", pan: "FGHIJ5678K", compliance_status: "VERIFIED", risk_category: "MEDIUM", status: "ACTIVE", onboarded_at: DateTime.utc_now() } ] end end # Run the seeds DaProductApp.Seeds.MerchantManagementSeeds.run()