Files
HaimKortovich b2a9d4caa1
All checks were successful
Build and Publish / build-release (push) Successful in 1m3s
fix decoder
2026-05-15 14:24:59 -05:00

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