All checks were successful
Build and Publish / build-release (push) Successful in 1m3s
149 lines
2.8 KiB
Elixir
149 lines
2.8 KiB
Elixir
defmodule CustomerService.Events do
|
|
@moduledoc """
|
|
Events macro for adding JsonDecoder to domain events.
|
|
"""
|
|
|
|
alias CustomerService.Aggregates.CustomerId
|
|
alias CustomerService.Aggregates.LeadId
|
|
|
|
defmacro __using__(_opts) do
|
|
quote do
|
|
defimpl Commanded.Serialization.JsonDecoder do
|
|
def decode(
|
|
%{
|
|
id: %{
|
|
org_id: org_id,
|
|
customer_type: customer_type,
|
|
customer_id: customer_id
|
|
}
|
|
} = event
|
|
) do
|
|
%{
|
|
event
|
|
| id: CustomerService.Aggregates.CustomerId.new(org_id, customer_type, customer_id)
|
|
}
|
|
end
|
|
|
|
def decode(
|
|
%{
|
|
id: %{
|
|
org_id: org_id,
|
|
type: "lead",
|
|
lead_id: lead_id
|
|
}
|
|
} = event
|
|
) do
|
|
%{event | id: CustomerService.Aggregates.LeadId.new(org_id, lead_id)}
|
|
end
|
|
|
|
def decode(event), do: event
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
defmodule CustomerService.Events.CustomerCreated do
|
|
use CustomerService.Events
|
|
@derive Jason.Encoder
|
|
defstruct [
|
|
:id,
|
|
:first_name,
|
|
:last_name,
|
|
:birth_date,
|
|
:gender,
|
|
:email,
|
|
:phone,
|
|
:address,
|
|
:document_id
|
|
]
|
|
end
|
|
|
|
defmodule CustomerService.Events.CorporateCustomerCreated do
|
|
use CustomerService.Events
|
|
@derive Jason.Encoder
|
|
defstruct [
|
|
:id,
|
|
:legal_name,
|
|
:commercial_name,
|
|
:ruc,
|
|
:legal_rep_name,
|
|
:legal_rep_document_id,
|
|
:email,
|
|
:phone,
|
|
:address
|
|
]
|
|
end
|
|
|
|
defmodule CustomerService.Events.CustomerUpdated do
|
|
use CustomerService.Events
|
|
@derive Jason.Encoder
|
|
defstruct [
|
|
:id,
|
|
:first_name,
|
|
:last_name,
|
|
:birth_date,
|
|
:gender,
|
|
:email,
|
|
:phone,
|
|
:address,
|
|
:document_id
|
|
]
|
|
end
|
|
|
|
defmodule CustomerService.Events.CorporateCustomerUpdated do
|
|
use CustomerService.Events
|
|
@derive Jason.Encoder
|
|
defstruct [
|
|
:id,
|
|
:legal_name,
|
|
:commercial_name,
|
|
:ruc,
|
|
:legal_rep_name,
|
|
:legal_rep_document_id,
|
|
:email,
|
|
:phone,
|
|
:address
|
|
]
|
|
end
|
|
|
|
defmodule CustomerService.Events.QuickLeadCreated do
|
|
use CustomerService.Events
|
|
@derive Jason.Encoder
|
|
defstruct [
|
|
:id,
|
|
:name,
|
|
:email,
|
|
:phone,
|
|
:company_name,
|
|
:status,
|
|
:priority,
|
|
:source,
|
|
:notes,
|
|
:assigned_to,
|
|
:estimated_value,
|
|
:expected_close_date
|
|
]
|
|
end
|
|
|
|
defmodule CustomerService.Events.QuickLeadUpdated do
|
|
use CustomerService.Events
|
|
@derive Jason.Encoder
|
|
defstruct [
|
|
:id,
|
|
:name,
|
|
:email,
|
|
:phone,
|
|
:company_name,
|
|
:notes,
|
|
:assigned_to,
|
|
:estimated_value,
|
|
:expected_close_date
|
|
]
|
|
end
|
|
|
|
defmodule CustomerService.Events.LeadStatusUpdated do
|
|
use CustomerService.Events
|
|
@derive Jason.Encoder
|
|
defstruct [:id, :status, :previous_status, :updated_at]
|
|
end
|