Some checks failed
Build and Publish / build-release (push) Failing after 1m49s
45 lines
1.6 KiB
Elixir
45 lines
1.6 KiB
Elixir
defmodule PolicyService.Aggregates.LifePolicyApplication do
|
|
use PolicyService.Aggregates.PolicyApplication,
|
|
policy_type: "life",
|
|
commands: PolicyService.Commands.LifePolicy
|
|
|
|
@valid_coverage_types ~w(banking protection)
|
|
|
|
def validate_insured_object(%{
|
|
"coverage_type" => coverage_type,
|
|
"coverage_amount" => coverage_amount,
|
|
"coverage_years" => coverage_years,
|
|
"smoker" => smoker,
|
|
"medications" => medications,
|
|
"surgeries" => surgeries,
|
|
"weight" => weight,
|
|
"height" => height
|
|
})
|
|
when is_binary(coverage_type) and byte_size(coverage_type) > 0 and
|
|
is_number(coverage_amount) and coverage_amount > 0 and
|
|
is_integer(coverage_years) and coverage_years > 0 and
|
|
is_boolean(smoker) and
|
|
is_list(medications) and
|
|
is_list(surgeries) and
|
|
is_number(weight) and weight > 0 and
|
|
is_number(height) and height > 0 do
|
|
cond do
|
|
coverage_type not in @valid_coverage_types -> {:error, :invalid_coverage_type}
|
|
coverage_years > 100 -> {:error, :invalid_coverage_years}
|
|
true -> :ok
|
|
end
|
|
end
|
|
|
|
def validate_insured_object(_), do: {:error, :invalid_life_details}
|
|
|
|
def validate_insured(%{"type" => "corporate"}),
|
|
do: {:error, :life_insurance_requires_individual}
|
|
|
|
def validate_insured(%{"type" => "individual", "gender" => gender} = insured)
|
|
when is_binary(gender) and byte_size(gender) > 0 do
|
|
super(insured)
|
|
end
|
|
|
|
def validate_insured(%{"type" => "individual"}), do: {:error, :missing_gender}
|
|
end
|