All checks were successful
Build and Publish / build-release (push) Successful in 1m24s
52 lines
1.4 KiB
Elixir
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 |