Files
customer-service/lib/customer_service/events.ex
HaimKortovich 4519f797fd
All checks were successful
Build and Publish / build-release (push) Successful in 3m7s
partition by org_id and add auth
2026-05-15 10:08:54 -05:00

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