# Script to seed MF919-specific parameter categories # Run with: mix run priv/repo/seeds/mf919_parameter_categories.exs Mix.Task.run("app.start") require Logger alias DaProductApp.Repo alias DaProductApp.ParameterManagement.ParameterCategory # Get or create the MF919 root/parent category mf919_root = Repo.get_by(ParameterCategory, code: "mf919_device_setup") || ( {:ok, category} = Repo.insert(%ParameterCategory{ name: "MF919 Device Setup", code: "mf919_device_setup", description: "Root category for MoreFun MF919 device configuration parameters", sort_order: 10, is_active: true }) category ) Logger.info("Using MF919 root category ID: #{mf919_root.id}") # Define child categories under the MF919 root child_categories = [ %{ name: "MF919 Base / Merchant Defaults", code: "mf919_base", description: "Base merchant and transaction default parameters for MF919", sort_order: 1 }, %{ name: "MF919 Merchant Overlay", code: "mf919_merchant", description: "Per-terminal merchant-specific parameters (MID, TID, Batch) for MF919", sort_order: 2 }, %{ name: "MF919 Communication", code: "mf919_comm", description: "Network and communication parameters for MF919", sort_order: 3 }, %{ name: "MF919 Transactions", code: "mf919_transactions", description: "Transaction type enable/disable toggles for MF919", sort_order: 4 }, %{ name: "MF919 Printing", code: "mf919_printing", description: "Printer configuration parameters for MF919", sort_order: 5 }, %{ name: "MF919 PINPAD", code: "mf919_pinpad", description: "PINPAD and external device parameters for MF919", sort_order: 6 }, %{ name: "MF919 Scanner", code: "mf919_scanner", description: "Barcode / QR scanner parameters for MF919", sort_order: 7 }, %{ name: "MF919 Security", code: "mf919_security", description: "Security, password, and operational flag parameters for MF919", sort_order: 8 } ] Enum.each(child_categories, fn attrs -> case Repo.get_by(ParameterCategory, code: attrs.code) do nil -> changeset = ParameterCategory.changeset(%ParameterCategory{}, Map.put(attrs, :parent_id, mf919_root.id) |> Map.put(:is_active, true)) case Repo.insert(changeset) do {:ok, cat} -> Logger.info("Created category: #{cat.code} (ID: #{cat.id})") {:error, reason} -> Logger.error("Failed to create category #{attrs.code}: #{inspect(reason)}") end existing -> Logger.info("Category already exists: #{existing.code} (ID: #{existing.id})") end end) Logger.info("MF919 parameter categories seeding completed!")