add quick leads
All checks were successful
Build and Publish / build-release (push) Successful in 2m13s

This commit is contained in:
2026-04-30 16:40:40 -05:00
parent 3a22776568
commit cfd810beba
20 changed files with 1054 additions and 11 deletions

View File

@@ -2,19 +2,25 @@ defmodule CustomerServiceWeb.CustomerController do
use CustomerServiceWeb, :controller
use OpenApiSpex.ControllerSpecs
alias CustomerService.Commands.{CreateCustomer, CreateCorporateCustomer}
alias CustomerService.Commands.{
CreateCustomer,
CreateCorporateCustomer,
UpdateCustomer,
UpdateCorporateCustomer
}
alias CustomerService.Customer.Queries, as: CustomerQueries
alias CustomerServiceWeb.Schemas.Customer, as: CustomerSchemas
alias CustomerServiceWeb.QueryHelpers
operation(:index,
summary: "List customers",
parameters: [
"page[number]": [in: :query, type: :integer, required: false],
"page[size]": [in: :query, type: :integer, required: false],
"filters[0][field]": [in: :query, type: :string, required: false],
"filters[0][op]": [in: :query, type: :string, required: false],
"filters[0][value]": [in: :query, type: :string, required: false]
],
parameters:
QueryHelpers.flop([:customer_type, :email, :phone, :document_id, :ruc, :search], [
:last_name,
:legal_name,
:inserted_at
]),
responses: [
ok: {"Customer list", "application/json", CustomerSchemas.CustomerListResponse}
]
@@ -119,6 +125,63 @@ defmodule CustomerServiceWeb.CustomerController do
dispatch_and_return(conn, command, customer_id)
end
operation(:update,
summary: "Update individual customer",
parameters: [
id: [in: :path, type: :string, required: true, description: "Customer ID"]
],
request_body:
{"Customer data", "application/json", CustomerSchemas.UpdateCustomer, required: true},
responses: [
ok: {"Customer updated", "application/json", CustomerSchemas.CustomerResponse}
]
)
def update(conn, %{"id" => id} = params) do
command = %UpdateCustomer{
id: id,
first_name: params["first_name"],
last_name: params["last_name"],
birth_date: parse_date(params["birth_date"]),
gender: params["gender"],
email: params["email"],
phone: params["phone"],
document_id: params["document_id"],
address: params["address"]
}
dispatch_and_return(conn, command, id)
end
operation(:update_corporate,
summary: "Update corporate customer",
parameters: [
id: [in: :path, type: :string, required: true, description: "Customer ID"]
],
request_body:
{"Corporate customer data", "application/json", CustomerSchemas.UpdateCorporateCustomer,
required: true},
responses: [
ok: {"Corporate customer updated", "application/json", CustomerSchemas.CustomerResponse}
]
)
def update_corporate(conn, %{"id" => id} = params) do
command = %UpdateCorporateCustomer{
id: id,
legal_name: params["legal_name"],
commercial_name: params["commercial_name"],
ruc: params["ruc"],
legal_rep_name: params["legal_rep_name"],
legal_rep_document_id: params["legal_rep_document_id"],
email: params["email"],
phone: params["phone"],
address: params["address"]
}
dispatch_and_return(conn, command, id)
end
# ---------------------------------------------------------------------------
# Private
# ---------------------------------------------------------------------------