# Script to seed Device Setup category parameters for EMV, Keys, and Application configs # Run with: mix run priv/repo/seeds/device_setup_parameters.exs # Ensure the application and Repo are started when this script runs via `mix run`. # This makes `Repo` and application modules available for DB operations. Mix.Task.run("app.start") # Ensure Logger macros are available in this script require Logger alias DaProductApp.Repo alias DaProductApp.ParameterManagement.{ParameterCategory, ParameterDefinition} # Get or create Device Setup category device_setup_category = Repo.get_by(ParameterCategory, code: "device_setup") || ( {:ok, category} = Repo.insert(%ParameterCategory{ name: "Device Setup", code: "device_setup", description: "Device configuration and setup parameters", sort_order: 0, is_active: true }) category ) Logger.info("Using Device Setup category ID: #{device_setup_category.id}") # Define parameters to seed parameters_to_seed = [ %{ key: "emv_config_version", name: "EMV Config Version", description: "Version of EMV configuration deployed on device", category_id: device_setup_category.id, default_value: "1.6", data_type: "string", is_required: false, is_active: true, display_order: 1 }, %{ key: "keys_config_version", name: "Keys Config Version", description: "Version of encryption keys configuration deployed on device", category_id: device_setup_category.id, default_value: "1.7", data_type: "string", is_required: false, is_active: true, display_order: 2 }, %{ key: "application_version", name: "Application Version", description: "Version of main application deployed on device", category_id: device_setup_category.id, default_value: "3.7", data_type: "string", is_required: false, is_active: true, display_order: 3 } ] # Seed parameters Enum.each(parameters_to_seed, fn param_attrs -> # Check if parameter already exists case Repo.get_by(ParameterDefinition, key: param_attrs.key) do nil -> changeset = ParameterDefinition.changeset(%ParameterDefinition{}, param_attrs) case Repo.insert(changeset) do {:ok, param} -> Logger.info("Created parameter: #{param.key} (ID: #{param.id})") {:error, reason} -> Logger.error("Failed to create parameter #{param_attrs.key}: #{inspect(reason)}") end existing_param -> Logger.info("Parameter already exists: #{existing_param.key} (ID: #{existing_param.id})") end end) Logger.info("Device Setup parameters seeding completed!")