Remove obsolete customer endpoint and update related documentation
- Deleted the `/admin/v1/customers/{id}/with-companies` endpoint from the API documentation and Swagger files to streamline the API structure.
- Updated the router to remove the corresponding route registration for the deprecated endpoint.
- Enhanced the company repository and service to support batch retrieval of companies by IDs, improving efficiency in data handling.
- Adjusted customer service methods to utilize the new batch retrieval functionality for loading companies associated with customers.
- Improved logging practices to provide better traceability for company retrieval operations.
This commit is contained in:
@@ -84,33 +84,6 @@ func (h *Handler) CreateCustomer(c echo.Context) error {
|
||||
func (h *Handler) GetCustomerByID(c echo.Context) error {
|
||||
idStr := c.Param("id")
|
||||
|
||||
customer, err := h.service.GetCustomerByID(c.Request().Context(), idStr)
|
||||
if err != nil {
|
||||
if err.Error() == "customer not found" {
|
||||
return response.NotFound(c, "Customer not found")
|
||||
}
|
||||
return response.InternalServerError(c, "Failed to get customer")
|
||||
}
|
||||
|
||||
return response.Success(c, customer.ToResponse(), "Customer retrieved successfully")
|
||||
}
|
||||
|
||||
// GetCustomerByIDWithCompanies retrieves a customer by ID with companies (Web Panel)
|
||||
// @Summary Get customer by ID with companies
|
||||
// @Description Retrieve detailed customer information by customer ID including assigned companies
|
||||
// @Tags Admin-Customers
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param id path string true "Customer ID"
|
||||
// @Success 200 {object} response.APIResponse{data=CustomerResponse} "Customer retrieved successfully"
|
||||
// @Failure 400 {object} response.APIResponse "Bad request - Invalid customer ID"
|
||||
// @Failure 404 {object} response.APIResponse "Not found - Customer not found"
|
||||
// @Failure 500 {object} response.APIResponse "Internal server error"
|
||||
// @Security BearerAuth
|
||||
// @Router /admin/v1/customers/{id}/with-companies [get]
|
||||
func (h *Handler) GetCustomerByIDWithCompanies(c echo.Context) error {
|
||||
idStr := c.Param("id")
|
||||
|
||||
customer, err := h.service.GetCustomerByIDWithCompanies(c.Request().Context(), idStr)
|
||||
if err != nil {
|
||||
if err.Error() == "customer not found" {
|
||||
@@ -234,7 +207,7 @@ func (h *Handler) ListCustomers(c echo.Context) error {
|
||||
return response.ValidationError(c, "Invalid request data", err.Error())
|
||||
}
|
||||
|
||||
result, err := h.service.ListCustomers(c.Request().Context(), form)
|
||||
result, err := h.service.ListCustomersWithCompanies(c.Request().Context(), form)
|
||||
if err != nil {
|
||||
return response.InternalServerError(c, "Failed to list customers")
|
||||
}
|
||||
|
||||
@@ -1280,24 +1280,35 @@ func (s *customerService) getDefaultTimezone(timezone *string) string {
|
||||
|
||||
// loadCompaniesForCustomer loads company summaries for a customer
|
||||
func (s *customerService) loadCompaniesForCustomer(ctx context.Context, customer *Customer) ([]*CompanySummary, error) {
|
||||
var companies []*CompanySummary
|
||||
if len(customer.CompanyIDs) == 0 {
|
||||
return []*CompanySummary{}, nil
|
||||
}
|
||||
|
||||
// Load companies from CompanyIDs
|
||||
for _, companyID := range customer.CompanyIDs {
|
||||
company, err := s.companyService.GetCompanyByID(ctx, companyID)
|
||||
if err != nil {
|
||||
s.logger.Warn("Failed to load company for customer", map[string]interface{}{
|
||||
"error": err.Error(),
|
||||
"customer_id": customer.ID,
|
||||
"company_id": companyID,
|
||||
})
|
||||
continue // Skip companies that can't be loaded
|
||||
}
|
||||
companies = append(companies, &CompanySummary{
|
||||
// Load companies in batch using the new GetCompaniesByIDs method
|
||||
companies, err := s.companyService.GetCompaniesByIDs(ctx, customer.CompanyIDs)
|
||||
if err != nil {
|
||||
s.logger.Error("Failed to load companies for customer", map[string]interface{}{
|
||||
"error": err.Error(),
|
||||
"customer_id": customer.ID,
|
||||
"company_ids": customer.CompanyIDs,
|
||||
})
|
||||
return []*CompanySummary{}, err
|
||||
}
|
||||
|
||||
// Convert to CompanySummary format
|
||||
var companySummaries []*CompanySummary
|
||||
for _, company := range companies {
|
||||
companySummaries = append(companySummaries, &CompanySummary{
|
||||
ID: company.ID.Hex(),
|
||||
Name: company.Name,
|
||||
})
|
||||
}
|
||||
|
||||
return companies, nil
|
||||
s.logger.Info("Companies loaded for customer", map[string]interface{}{
|
||||
"customer_id": customer.ID,
|
||||
"requested_count": len(customer.CompanyIDs),
|
||||
"loaded_count": len(companySummaries),
|
||||
})
|
||||
|
||||
return companySummaries, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user