Some checks failed
Build and Publish / build-release (push) Failing after 1s
51 lines
1.4 KiB
Elixir
51 lines
1.4 KiB
Elixir
defmodule CustomerService.Projectors.Customer do
|
|
use Commanded.Projections.Ecto,
|
|
application: CustomerService.CommandedApp,
|
|
repo: CustomerService.Repo,
|
|
name: "CustomerService.Projetors.Customer",
|
|
consistency: :strong
|
|
|
|
alias CustomerService.Events
|
|
alias CustomerService.Projections.Customer
|
|
|
|
project(%Events.CustomerCreated{} = event, fn multi ->
|
|
Ecto.Multi.insert(multi, :customer, %Customer{
|
|
id: event.id,
|
|
customer_type: "individual",
|
|
first_name: event.first_name,
|
|
last_name: event.last_name,
|
|
birth_date: parse_date(event.birth_date),
|
|
gender: event.gender,
|
|
email: event.email,
|
|
phone: event.phone,
|
|
address: event.address,
|
|
document_id: event.document_id
|
|
})
|
|
end)
|
|
|
|
defp parse_date(nil), do: nil
|
|
defp parse_date(%Date{} = d), do: d
|
|
|
|
defp parse_date(str) when is_binary(str) do
|
|
case Date.from_iso8601(str) do
|
|
{:ok, d} -> d
|
|
_ -> nil
|
|
end
|
|
end
|
|
|
|
project(%Events.CorporateCustomerCreated{} = e, _meta, fn multi ->
|
|
Ecto.Multi.insert(multi, :customer, %Customer{
|
|
id: e.id,
|
|
customer_type: "corporate",
|
|
legal_name: e.legal_name,
|
|
commercial_name: e.commercial_name,
|
|
ruc: e.ruc,
|
|
legal_rep_name: e.legal_rep_name,
|
|
legal_rep_document_id: e.legal_rep_document_id,
|
|
email: e.email,
|
|
phone: e.phone,
|
|
address: e.address
|
|
})
|
|
end)
|
|
end
|