Files
workload-service/lib/workload_service/aggregates/application_id.ex
HaimKortovich 1187b8e1a8
All checks were successful
Build and Publish / build-release (push) Successful in 1m24s
handle application_id correctly
2026-04-17 12:44:02 -05:00

52 lines
1.4 KiB
Elixir

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