# Script to demonstrate how merchant-specific MF919 overlay values should be # applied as DeviceParameterOverride records for a specific terminal. # # This script sets MERCHANT_ID, TERMINAL_ID, and BATCH_NO from # default_merchants.properties as per-terminal overrides rather than embedding # them into the shared default template. # # Run with: mix run priv/repo/seeds/mf919_merchant_overlay.exs # # Prerequisites: # 1. mf919_parameter_categories.exs # 2. mf919_parameter_definitions.exs # 3. The terminal referenced by SAMPLE_TERMINAL_ID must exist in the database. # # Usage: # SAMPLE_TERMINAL_ID= mix run priv/repo/seeds/mf919_merchant_overlay.exs # OR edit the @sample_terminal_id value below for a quick test. Mix.Task.run("app.start") require Logger alias DaProductApp.Repo alias DaProductApp.ParameterManagement.{ParameterDefinition, DeviceParameterOverride} # --------------------------------------------------------------------------- # Target terminal – override via environment variable or set directly here. # --------------------------------------------------------------------------- sample_terminal_id = case System.get_env("SAMPLE_TERMINAL_ID") do nil -> Logger.warning("SAMPLE_TERMINAL_ID not set; using placeholder terminal_id = 1") 1 val -> case Integer.parse(val) do {id, ""} -> id _ -> Logger.error("SAMPLE_TERMINAL_ID is not a valid integer: #{val}") System.halt(1) end end # --------------------------------------------------------------------------- # Overlay values from default_merchants.properties # --------------------------------------------------------------------------- overlay_values = [ {"MERCHANT_ID", "123456789012345"}, {"TERMINAL_ID", "12345679"}, {"BATCH_NO", "000001"} ] Enum.each(overlay_values, fn {key, value} -> case Repo.get_by(ParameterDefinition, key: key) do nil -> Logger.warning("Parameter definition not found for key: #{key} – skipping") param_def -> existing = Repo.get_by(DeviceParameterOverride, terminal_id: sample_terminal_id, parameter_definition_id: param_def.id ) case existing do nil -> changeset = DeviceParameterOverride.changeset(%DeviceParameterOverride{}, %{ terminal_id: sample_terminal_id, parameter_definition_id: param_def.id, value: value, source: "manual" }) case Repo.insert(changeset) do {:ok, override} -> Logger.info( "Created override: terminal=#{sample_terminal_id} #{key}=#{value} (ID: #{override.id})" ) {:error, reason} -> Logger.error("Failed to create override #{key}: #{inspect(reason)}") end ov -> Logger.info( "Override already exists: terminal=#{sample_terminal_id} #{key}=#{ov.value} (ID: #{ov.id})" ) end end end) Logger.info("MF919 merchant overlay seeding completed for terminal ID: #{sample_terminal_id}")