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:
n.nakhostin
2025-08-11 19:12:31 +03:30
parent a1db2a9790
commit e3ee3d64ce
8 changed files with 100 additions and 219 deletions
+50
View File
@@ -8,6 +8,7 @@ import (
mongopkg "tm/pkg/mongo"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
// Repository defines the interface for company data operations
@@ -17,6 +18,7 @@ type Repository interface {
GetByName(ctx context.Context, name string) (*Company, error)
GetByRegistrationNumber(ctx context.Context, registrationNumber string) (*Company, error)
GetByTaxID(ctx context.Context, taxID string) (*Company, error)
GetByIDs(ctx context.Context, ids []string) ([]*Company, error)
Update(ctx context.Context, company *Company) error
Delete(ctx context.Context, id string) error
List(ctx context.Context, limit, offset int) ([]*Company, error)
@@ -184,6 +186,54 @@ func (r *companyRepository) GetByTaxID(ctx context.Context, taxID string) (*Comp
return company, nil
}
// GetByIDs retrieves multiple companies by their IDs
func (r *companyRepository) GetByIDs(ctx context.Context, ids []string) ([]*Company, error) {
if len(ids) == 0 {
return []*Company{}, nil
}
// Convert string IDs to ObjectIDs for MongoDB query
objectIDs := make([]interface{}, len(ids))
for i, id := range ids {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
r.logger.Warn("Invalid company ID format", map[string]interface{}{
"id": id,
"error": err.Error(),
})
continue
}
objectIDs[i] = objectID
}
if len(objectIDs) == 0 {
return []*Company{}, nil
}
filter := bson.M{"_id": bson.M{"$in": objectIDs}}
companies, err := r.ormRepo.FindMany(ctx, filter, len(ids))
if err != nil {
r.logger.Error("Failed to get companies by IDs", map[string]interface{}{
"error": err.Error(),
"ids": ids,
})
return nil, err
}
// Convert to pointer slice
result := make([]*Company, len(companies))
for i := range companies {
result[i] = &companies[i]
}
r.logger.Info("Retrieved companies by IDs", map[string]interface{}{
"requested_count": len(ids),
"found_count": len(result),
})
return result, nil
}
// Update updates a company
func (r *companyRepository) Update(ctx context.Context, company *Company) error {
// Set updated timestamp using Unix timestamp
+24
View File
@@ -13,6 +13,7 @@ type Service interface {
// Core company operations
CreateCompany(ctx context.Context, form *CreateCompanyForm, createdBy *string) (*Company, error)
GetCompanyByID(ctx context.Context, id string) (*Company, error)
GetCompaniesByIDs(ctx context.Context, ids []string) ([]*Company, error)
UpdateCompany(ctx context.Context, id string, form *UpdateCompanyForm, updatedBy *string) (*Company, error)
DeleteCompany(ctx context.Context, id string, deletedBy *string) error
@@ -144,6 +145,29 @@ func (s *companyService) GetCompanyByID(ctx context.Context, id string) (*Compan
return company, nil
}
// GetCompaniesByIDs retrieves multiple companies by their IDs
func (s *companyService) GetCompaniesByIDs(ctx context.Context, ids []string) ([]*Company, error) {
if len(ids) == 0 {
return []*Company{}, nil
}
companies, err := s.repository.GetByIDs(ctx, ids)
if err != nil {
s.logger.Error("Failed to get companies by IDs", map[string]interface{}{
"error": err.Error(),
"ids": ids,
})
return nil, err
}
s.logger.Info("Companies retrieved successfully", map[string]interface{}{
"requested_count": len(ids),
"found_count": len(companies),
})
return companies, nil
}
// UpdateCompany updates a company
func (s *companyService) UpdateCompany(ctx context.Context, id string, form *UpdateCompanyForm, updatedBy *string) (*Company, error) {
// Get existing company