All checks were successful
Build and Publish / build-release (push) Successful in 3m7s
130 lines
2.3 KiB
Elixir
130 lines
2.3 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: %CustomerId{} = id} = event) do
|
|
%{event | id: id}
|
|
end
|
|
|
|
def decode(%{id: %LeadId{} = id} = event) do
|
|
%{event | id: 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
|