Implement Company Search and Update API Documentation

- Introduced a new search functionality for companies, allowing advanced filtering capabilities including tags, business criteria, and location.
- Updated the API documentation to reflect changes in the search endpoint, enhancing clarity for API consumers.
- Refactored existing company-related API endpoints for consistency, including renaming and restructuring routes.
- Enhanced response structures to return company entities directly, simplifying the response handling in API endpoints.
- Removed unused query parameters and handlers, streamlining the company management functionality.
This commit is contained in:
n.nakhostin
2025-09-08 11:23:15 +03:30
parent 777bbfd714
commit ee830f8c1b
16 changed files with 589 additions and 5338 deletions
+6 -109
View File
@@ -13,7 +13,6 @@ const (
CompanyStatusActive CompanyStatus = "active"
CompanyStatusInactive CompanyStatus = "inactive"
CompanyStatusSuspended CompanyStatus = "suspended"
CompanyStatusPending CompanyStatus = "pending"
)
// CompanyType represents the type of company
@@ -48,9 +47,8 @@ type Company struct {
Address *Address `bson:"address,omitempty" json:"address,omitempty"`
// Contact information
ContactPerson *ContactPerson `bson:"contact_person,omitempty" json:"contact_person,omitempty"`
Phone *string `bson:"phone,omitempty" json:"phone,omitempty"`
Email *string `bson:"email,omitempty" json:"email,omitempty"`
Phone *string `bson:"phone,omitempty" json:"phone,omitempty"`
Email *string `bson:"email,omitempty" json:"email,omitempty"`
// Tags for categorization and search
Tags *CompanyTags `bson:"tags,omitempty" json:"tags,omitempty"`
@@ -64,10 +62,6 @@ type Company struct {
Language string `bson:"language" json:"language"` // Default: "en"
Currency string `bson:"currency" json:"currency"` // Default: "USD"
Timezone string `bson:"timezone" json:"timezone"` // Default: "UTC"
// Audit fields
CreatedBy *string `bson:"created_by,omitempty" json:"created_by,omitempty"`
UpdatedBy *string `bson:"updated_by,omitempty" json:"updated_by,omitempty"`
}
// SetID sets the company ID (implements IDSetter interface)
@@ -80,22 +74,22 @@ func (c *Company) GetID() string {
return c.ID.Hex()
}
// SetCreatedAt sets the created timestamp (implements Timestampable interface)
// SetCreatedAt sets the created timestamp (implements Timestamp interface)
func (c *Company) SetCreatedAt(timestamp int64) {
c.CreatedAt = timestamp
}
// SetUpdatedAt sets the updated timestamp (implements Timestampable interface)
// SetUpdatedAt sets the updated timestamp (implements Timestamp interface)
func (c *Company) SetUpdatedAt(timestamp int64) {
c.UpdatedAt = timestamp
}
// GetCreatedAt returns the created timestamp (implements Timestampable interface)
// GetCreatedAt returns the created timestamp (implements Timestamp interface)
func (c *Company) GetCreatedAt() int64 {
return c.CreatedAt
}
// GetUpdatedAt returns the updated timestamp (implements Timestampable interface)
// GetUpdatedAt returns the updated timestamp (implements Timestamp interface)
func (c *Company) GetUpdatedAt() int64 {
return c.UpdatedAt
}
@@ -109,18 +103,6 @@ type Address struct {
Country string `bson:"country" json:"country"`
}
// ContactPerson represents a contact person for the company
type ContactPerson struct {
FirstName string `bson:"first_name" json:"first_name"`
LastName string `bson:"last_name" json:"last_name"`
FullName string `bson:"full_name" json:"full_name"`
Position string `bson:"position" json:"position"`
Email string `bson:"email" json:"email"`
Phone string `bson:"phone" json:"phone"`
Mobile *string `bson:"mobile,omitempty" json:"mobile,omitempty"`
IsPrimary bool `bson:"is_primary" json:"is_primary"`
}
// CompanyTags represents tags for company categorization and search
type CompanyTags struct {
// CPV codes (Common Procurement Vocabulary)
@@ -138,88 +120,3 @@ type CompanyTags struct {
// Certifications
Certifications []string `bson:"certifications,omitempty" json:"certifications,omitempty"`
}
// CompanyResponse represents the company data sent in API responses
type CompanyResponse struct {
ID string `json:"id"`
Name string `json:"name"`
Type string `json:"type"`
Status string `json:"status"`
RegistrationNumber string `json:"registration_number"`
TaxID string `json:"tax_id"`
Industry string `json:"industry"`
Description *string `json:"description,omitempty"`
Website *string `json:"website,omitempty"`
EmployeeCount *int `json:"employee_count,omitempty"`
AnnualRevenue *float64 `json:"annual_revenue,omitempty"`
FoundedYear *int `json:"founded_year,omitempty"`
Address *Address `json:"address,omitempty"`
ContactPerson *ContactPerson `json:"contact_person,omitempty"`
Phone *string `json:"phone,omitempty"`
Email *string `json:"email,omitempty"`
Tags *CompanyTags `json:"tags,omitempty"`
IsVerified bool `json:"is_verified"`
IsCompliant bool `json:"is_compliant"`
ComplianceNotes *string `json:"compliance_notes,omitempty"`
Language string `json:"language"`
Currency string `json:"currency"`
Timezone string `json:"timezone"`
CreatedAt int64 `json:"created_at"`
UpdatedAt int64 `json:"updated_at"`
CreatedBy *string `json:"created_by,omitempty"`
UpdatedBy *string `json:"updated_by,omitempty"`
}
// ToResponse converts Company to CompanyResponse
func (c *Company) ToResponse() *CompanyResponse {
return &CompanyResponse{
ID: c.ID.Hex(),
Name: c.Name,
Type: string(c.Type),
Status: string(c.Status),
RegistrationNumber: c.RegistrationNumber,
TaxID: c.TaxID,
Industry: c.Industry,
Description: c.Description,
Website: c.Website,
EmployeeCount: c.EmployeeCount,
AnnualRevenue: c.AnnualRevenue,
FoundedYear: c.FoundedYear,
Address: c.Address,
ContactPerson: c.ContactPerson,
Phone: c.Phone,
Email: c.Email,
Tags: c.Tags,
IsVerified: c.IsVerified,
IsCompliant: c.IsCompliant,
ComplianceNotes: c.ComplianceNotes,
Language: c.Language,
Currency: c.Currency,
Timezone: c.Timezone,
CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt,
CreatedBy: c.CreatedBy,
UpdatedBy: c.UpdatedBy,
}
}
type CompanyProfileResponse struct {
ID string `json:"id"`
Name string `json:"name"`
RegistrationNumber string `json:"registration_number"`
Industry string `json:"industry"`
FoundedYear *int `json:"founded_year,omitempty"`
CreatedAt int64 `json:"created_at"`
}
// ToResponse converts Company to CompanyResponse
func (c *Company) ToProfileResponse() *CompanyProfileResponse {
return &CompanyProfileResponse{
ID: c.ID.Hex(),
Name: c.Name,
RegistrationNumber: c.RegistrationNumber,
Industry: c.Industry,
FoundedYear: c.FoundedYear,
CreatedAt: c.CreatedAt,
}
}