# Script for populating the database. You can run it as: # # mix run priv/repo/seeds.exs # # Inside the script, you can read and write to any of your # repositories directly: # # DaProductApp.Repo.insert!(%DaProductApp.SomeSchema{}) # # We recommend using the bang functions (`insert!`, `update!` # and so on) as they will fail if something goes wrong. import Ecto.Query alias DaProductApp.Repo alias DaProductApp.Acquirer.Schemas.{AcquirerTerminal, AcquirerTerminalStan} IO.puts("🌱 Starting database seeding...") # Create YSP Acquirer Terminal Configuration # This terminal was referenced in your transaction logs IO.puts("Creating YSP terminal configuration...") terminal_attrs = %{ tid: "12345671", # Terminal ID mid: "123456789012345", # Merchant ID acquirer_id: 1, # Link to Acquirer ID terminal_name: "YSP Test Terminal", terminal_type: "POS", terminal_location: "Test Location", currency_code: "840", # USD country_code: "840", # USA mcc_code: "5999", # Miscellaneous retail nii: "000", fiid: "12345678901", application_type: "01", current_batch_no: "000001", batch_date: "20250924", batch_time: "120000", max_batch_size: 1000, auto_settlement: true, settlement_time: "2359", key_set_id: "KEY_SET_01", pin_key: "1234567890ABCDEF1234567890ABCDEF", mac_key: "FEDCBA0987654321FEDCBA0987654321", data_key: "ABCDEF1234567890ABCDEF1234567890", status: "ACTIVE", # Required field - ACTIVE/INACTIVE/SUSPENDED/MAINTENANCE created_dateTime: NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second), updated_dateTime: NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second), created_by: "SEED_SCRIPT", updated_by: "SEED_SCRIPT" } # Check if terminal already exists case Repo.get_by(AcquirerTerminal, tid: "12345671") do nil -> IO.puts(" āœ“ Creating new terminal 12345671...") terminal = %AcquirerTerminal{} |> AcquirerTerminal.changeset(terminal_attrs) |> Repo.insert!() IO.puts(" āœ“ Terminal created: #{terminal.tid} (ID: #{terminal.id})") terminal existing_terminal -> IO.puts(" ↻ Terminal 12345671 already exists, updating...") terminal = existing_terminal |> AcquirerTerminal.changeset(terminal_attrs) |> Repo.update!() IO.puts(" āœ“ Terminal updated: #{terminal.tid} (ID: #{terminal.id})") terminal end # Create STAN (System Trace Audit Number) configuration IO.puts("Creating STAN configuration for terminal...") stan_attrs = %{ tid: "12345671", # Terminal ID (8 chars) - matches schema acquirer_id: 1, current_stan: "001000", # Current STAN as string (6 chars) stan_date: Date.utc_today() |> Date.to_string() |> String.replace("-", ""), last_used_stan: "001000", # Last used STAN (6 chars) last_reset_date: Date.utc_today() |> Date.to_string() |> String.replace("-", ""), last_reset_time: "000000", # Last reset time (6 chars) max_stan_value: 999999, # Max STAN value auto_reset_daily: true, reset_time: "0000", # Reset time (4 chars) daily_transaction_count: 0, total_transaction_count: 0, last_transaction_date: Date.utc_today() |> Date.to_string() |> String.replace("-", ""), last_transaction_time: "000000", rollover_count: 0, recovery_mode: false, duplicate_stan_count: 0, status: "ACTIVE", created_dateTime: NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second), updated_dateTime: NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second), created_by: "SEED_SCRIPT", updated_by: "SEED_SCRIPT" } # Check if STAN config already exists case Repo.get_by(AcquirerTerminalStan, tid: "12345671") do nil -> IO.puts(" āœ“ Creating new STAN config for terminal 12345671...") stan = %AcquirerTerminalStan{} |> AcquirerTerminalStan.changeset(stan_attrs) |> Repo.insert!() IO.puts(" āœ“ STAN config created: #{stan.tid} (Current STAN: #{stan.current_stan})") existing_stan -> IO.puts(" ↻ STAN config for terminal 12345671 already exists, updating...") stan = existing_stan |> AcquirerTerminalStan.changeset(stan_attrs) |> Repo.update!() IO.puts(" āœ“ STAN config updated: #{stan.tid} (Current STAN: #{stan.current_stan})") end IO.puts("\nāœ… Database seeding completed successfully!")