handle application_id correctly
All checks were successful
Build and Publish / build-release (push) Successful in 1m24s

This commit is contained in:
2026-04-17 12:44:02 -05:00
parent 571cc94711
commit 1187b8e1a8
4 changed files with 74 additions and 15 deletions

View File

@@ -0,0 +1,52 @@
defmodule WorkloadService.Aggregates.ApplicationId do
@moduledoc """
Application identifier with org_id, application_id, and policy_type.
Used to track which policy-service application this task belongs to.
"""
@derive Jason.Encoder
defstruct [:org_id, :application_id, :policy_type]
def new(org_id, application_id, policy_type) do
%__MODULE__{
org_id: org_id,
application_id: application_id,
policy_type: policy_type
}
end
def parse(map) when is_map(map) do
case map do
%{org_id: org_id, application_id: application_id, policy_type: policy_type} ->
{:ok, new(org_id, application_id, policy_type)}
_ ->
{:error, :invalid_application_id}
end
end
def parse!(map) do
case parse(map) do
{:ok, id} -> id
{:error, reason} -> raise ArgumentError, "invalid application_id #{inspect(map)}: #{reason}"
end
end
defimpl String.Chars do
def to_string(%WorkloadService.Aggregates.ApplicationId{
org_id: org_id,
application_id: application_id,
policy_type: policy_type
}) do
"#{org_id}:#{policy_type}:#{application_id}"
end
end
defimpl Commanded.Serialization.JsonDecoder do
def decode(%{org_id: org_id, application_id: application_id, policy_type: policy_type}) do
WorkloadService.Aggregates.ApplicationId.new(org_id, application_id, policy_type)
end
def decode(id), do: id
end
end