# Seed: config_file_versions # # Seeds the existing YSDK_L3_configuration.xml as the initial active EMV config # version (v1.0.0) for Castles MF919 terminals. # # Safe to run multiple times — uses upsert semantics via on_conflict. # # Usage: # mix run priv/repo/seeds/config_file_versions_seed.exs alias PlatformCore.Repo alias TmsCore.TerminalManagement.ConfigFileVersion l3_source_path = "priv/static/mf919/YSDK_L3_configuration.xml" checksum = case File.read(l3_source_path) do {:ok, content} -> :crypto.hash(:sha256, content) |> Base.encode16(case: :lower) {:error, reason} -> IO.puts("WARNING: Could not read #{l3_source_path}: #{inspect(reason)}. Checksum will be nil.") nil end emv_attrs = %{ config_type: "emv_config", vendor: "Castles", model: "MF919", version: "1.0.0", file_path: l3_source_path, checksum: checksum, is_active: true, release_notes: "Initial EMV L3 configuration (YSDK_L3_configuration.xml) — seeded from static file." } # Deactivate any existing emv_config rows for this vendor/model first Repo.update_all( from(c in ConfigFileVersion, where: c.config_type == "emv_config" and c.vendor == "Castles" and c.model == "MF919"), set: [is_active: false] ) import Ecto.Query, only: [from: 2] case Repo.get_by(ConfigFileVersion, config_type: "emv_config", vendor: "Castles", model: "MF919", version: "1.0.0" ) do nil -> case Repo.insert(ConfigFileVersion.changeset(%ConfigFileVersion{}, emv_attrs)) do {:ok, record} -> IO.puts("Seeded config_file_versions: emv_config Castles/MF919 v1.0.0 (id=#{record.id})") {:error, changeset} -> IO.puts("ERROR seeding config_file_versions: #{inspect(changeset.errors)}") end existing -> case Repo.update(ConfigFileVersion.changeset(existing, %{is_active: true, checksum: checksum})) do {:ok, _} -> IO.puts("config_file_versions: emv_config Castles/MF919 v1.0.0 already exists — re-activated (id=#{existing.id})") {:error, changeset} -> IO.puts("ERROR updating config_file_versions: #{inspect(changeset.errors)}") end end