handle application_id correctly
All checks were successful
Build and Publish / build-release (push) Successful in 1m24s
All checks were successful
Build and Publish / build-release (push) Successful in 1m24s
This commit is contained in:
52
lib/workload_service/aggregates/application_id.ex
Normal file
52
lib/workload_service/aggregates/application_id.ex
Normal 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
|
||||
Reference in New Issue
Block a user