diff --git a/lib/towerops/snmp.ex b/lib/towerops/snmp.ex index b2434bfa..8dfce3e1 100644 --- a/lib/towerops/snmp.ex +++ b/lib/towerops/snmp.ex @@ -1563,11 +1563,22 @@ defmodule Towerops.Snmp do Creates or updates a MAC address entry. """ def upsert_mac_address(attrs) do - case Repo.get_by(MacAddress, - device_id: attrs.device_id, - mac_address: attrs.mac_address, - vlan_id: attrs[:vlan_id] - ) do + import Ecto.Query + + # Build query to find existing MAC address entry + query = + from m in MacAddress, + where: m.device_id == ^attrs.device_id, + where: m.mac_address == ^attrs.mac_address + + # Handle vlan_id comparison (nil requires is_nil/1) + query = + case attrs[:vlan_id] do + nil -> where(query, [m], is_nil(m.vlan_id)) + vlan_id -> where(query, [m], m.vlan_id == ^vlan_id) + end + + case Repo.one(query) do nil -> %MacAddress{} |> MacAddress.changeset(attrs)