f5407abbf0
- Removed OwnerCustomerID from Company entity and CompanyResponse to streamline ownership representation. - Eliminated customer assignment fields from CreateCompanyForm and ListCompaniesForm for clarity. - Updated repository and service methods to remove GetByCustomerID and CountWithCustomer, simplifying the codebase. - Adjusted Search method parameters to exclude hasCustomer filter, enhancing search functionality. - Improved API documentation by removing references to customer assignment in handler comments.
212 lines
10 KiB
Go
212 lines
10 KiB
Go
package company
|
|
|
|
// CreateCompanyForm represents the form for creating a new company
|
|
type CreateCompanyForm struct {
|
|
Name string `json:"name" valid:"required,length(2|200)"`
|
|
Type string `json:"type" valid:"required,in(private|public|government|ngo|startup)"`
|
|
RegistrationNumber string `json:"registration_number" valid:"required,length(5|50)"`
|
|
TaxID string `json:"tax_id" valid:"required,length(5|50)"`
|
|
Industry string `json:"industry" valid:"required,length(2|100)"`
|
|
Description *string `json:"description,omitempty" valid:"optional,length(10|1000)"`
|
|
Website *string `json:"website,omitempty" valid:"optional,url"`
|
|
|
|
// Business information
|
|
EmployeeCount *int `json:"employee_count,omitempty" valid:"optional,range(1|100000)"`
|
|
AnnualRevenue *float64 `json:"annual_revenue,omitempty" valid:"optional,range(0|999999999999)"`
|
|
FoundedYear *int `json:"founded_year,omitempty" valid:"optional,range(1800|2100)"`
|
|
|
|
// Address information
|
|
Address *AddressForm `json:"address,omitempty"`
|
|
|
|
// Contact information
|
|
ContactPerson *ContactPersonForm `json:"contact_person,omitempty"`
|
|
Phone *string `json:"phone,omitempty" valid:"optional,length(10|20)"`
|
|
Email *string `json:"email,omitempty" valid:"optional,email"`
|
|
|
|
// Tags for categorization and search
|
|
Tags *CompanyTagsForm `json:"tags,omitempty"`
|
|
|
|
// Settings
|
|
Language *string `json:"language,omitempty" valid:"optional,in(en|ar|fr|es|de|zh|ja|ko)"`
|
|
Currency *string `json:"currency,omitempty" valid:"optional,in(USD|EUR|GBP|JPY|CAD|AUD|CHF|CNY|INR|BRL)"`
|
|
Timezone *string `json:"timezone,omitempty" valid:"optional,length(3|50)"`
|
|
}
|
|
|
|
// UpdateCompanyForm represents the form for updating a company
|
|
type UpdateCompanyForm struct {
|
|
Name *string `json:"name,omitempty" valid:"optional,length(2|200)"`
|
|
Type *string `json:"type,omitempty" valid:"optional,in(private|public|government|ngo|startup)"`
|
|
RegistrationNumber *string `json:"registration_number,omitempty" valid:"optional,length(5|50)"`
|
|
TaxID *string `json:"tax_id,omitempty" valid:"optional,length(5|50)"`
|
|
Industry *string `json:"industry,omitempty" valid:"optional,length(2|100)"`
|
|
Description *string `json:"description,omitempty" valid:"optional,length(10|1000)"`
|
|
Website *string `json:"website,omitempty" valid:"optional,url"`
|
|
|
|
// Business information
|
|
EmployeeCount *int `json:"employee_count,omitempty" valid:"optional,range(1|100000)"`
|
|
AnnualRevenue *float64 `json:"annual_revenue,omitempty" valid:"optional,range(0|999999999999)"`
|
|
FoundedYear *int `json:"founded_year,omitempty" valid:"optional,range(1800|2100)"`
|
|
|
|
// Address information
|
|
Address *AddressForm `json:"address,omitempty"`
|
|
|
|
// Contact information
|
|
ContactPerson *ContactPersonForm `json:"contact_person,omitempty"`
|
|
Phone *string `json:"phone,omitempty" valid:"optional,length(10|20)"`
|
|
Email *string `json:"email,omitempty" valid:"optional,email"`
|
|
|
|
// Tags for categorization and search
|
|
Tags *CompanyTagsForm `json:"tags,omitempty"`
|
|
|
|
// Settings
|
|
Language *string `json:"language,omitempty" valid:"optional,in(en|ar|fr|es|de|zh|ja|ko)"`
|
|
Currency *string `json:"currency,omitempty" valid:"optional,in(USD|EUR|GBP|JPY|CAD|AUD|CHF|CNY|INR|BRL)"`
|
|
Timezone *string `json:"timezone,omitempty" valid:"optional,length(3|50)"`
|
|
}
|
|
|
|
// ListCompaniesForm represents the form for listing companies with filters
|
|
type ListCompaniesForm struct {
|
|
Search *string `query:"search" valid:"optional"`
|
|
Type *string `query:"type" valid:"optional,in(private|public|government|ngo|startup)"`
|
|
Status *string `query:"status" valid:"optional,in(active|inactive|suspended|pending)"`
|
|
Industry *string `query:"industry" valid:"optional"`
|
|
IsVerified *bool `query:"is_verified" valid:"optional"`
|
|
IsCompliant *bool `query:"is_compliant" valid:"optional"`
|
|
Language *string `query:"language" valid:"optional"`
|
|
Currency *string `query:"currency" valid:"optional"`
|
|
CPVCodes []string `query:"cpv_codes" valid:"optional"`
|
|
Categories []string `query:"categories" valid:"optional"`
|
|
Keywords []string `query:"keywords" valid:"optional"`
|
|
Specializations []string `query:"specializations" valid:"optional"`
|
|
EmployeeCountMin *int `query:"employee_count_min" valid:"optional,min(1)"`
|
|
EmployeeCountMax *int `query:"employee_count_max" valid:"optional,min(1)"`
|
|
AnnualRevenueMin *float64 `query:"annual_revenue_min" valid:"optional,min(0)"`
|
|
AnnualRevenueMax *float64 `query:"annual_revenue_max" valid:"optional,min(0)"`
|
|
FoundedYearMin *int `query:"founded_year_min" valid:"optional,range(1800|2100)"`
|
|
FoundedYearMax *int `query:"founded_year_max" valid:"optional,range(1800|2100)"`
|
|
Limit *int `query:"limit" valid:"optional,range(1|100)"`
|
|
Offset *int `query:"offset" valid:"optional,min(0)"`
|
|
SortBy *string `query:"sort_by" valid:"optional,in(name|type|industry|created_at|updated_at|status|employee_count|annual_revenue)"`
|
|
SortOrder *string `query:"sort_order" valid:"optional,in(asc|desc)"`
|
|
}
|
|
|
|
// UpdateCompanyStatusForm represents the form for updating company status
|
|
type UpdateCompanyStatusForm struct {
|
|
Status string `json:"status" valid:"required,in(active|inactive|suspended|pending)"`
|
|
}
|
|
|
|
// UpdateCompanyVerificationForm represents the form for updating company verification status
|
|
type UpdateCompanyVerificationForm struct {
|
|
IsVerified bool `json:"is_verified"`
|
|
IsCompliant bool `json:"is_compliant"`
|
|
ComplianceNotes *string `json:"compliance_notes,omitempty" valid:"optional,length(0|1000)"`
|
|
}
|
|
|
|
// UpdateCompanyTagsForm represents the form for updating company tags
|
|
type UpdateCompanyTagsForm struct {
|
|
Tags *CompanyTagsForm `json:"tags" valid:"required"`
|
|
}
|
|
|
|
// AddTagsForm represents the form for adding tags to a company
|
|
type AddTagsForm struct {
|
|
CPVCodes []string `json:"cpv_codes,omitempty" valid:"optional"`
|
|
Categories []string `json:"categories,omitempty" valid:"optional"`
|
|
Keywords []string `json:"keywords,omitempty" valid:"optional"`
|
|
Specializations []string `json:"specializations,omitempty" valid:"optional"`
|
|
Certifications []string `json:"certifications,omitempty" valid:"optional"`
|
|
}
|
|
|
|
// RemoveTagsForm represents the form for removing tags from a company
|
|
type RemoveTagsForm struct {
|
|
CPVCodes []string `json:"cpv_codes,omitempty" valid:"optional"`
|
|
Categories []string `json:"categories,omitempty" valid:"optional"`
|
|
Keywords []string `json:"keywords,omitempty" valid:"optional"`
|
|
Specializations []string `json:"specializations,omitempty" valid:"optional"`
|
|
Certifications []string `json:"certifications,omitempty" valid:"optional"`
|
|
}
|
|
|
|
// SuspendCompanyForm represents the form for suspending a company
|
|
type SuspendCompanyForm struct {
|
|
Reason string `json:"reason" valid:"required,length(10|500)"`
|
|
}
|
|
|
|
// AddressForm represents the form for company address
|
|
type AddressForm struct {
|
|
Street string `json:"street" valid:"required,length(5|200)"`
|
|
City string `json:"city" valid:"required,length(2|100)"`
|
|
State string `json:"state" valid:"required,length(2|100)"`
|
|
PostalCode string `json:"postal_code" valid:"required,length(3|20)"`
|
|
Country string `json:"country" valid:"required,length(2|100)"`
|
|
}
|
|
|
|
// ContactPersonForm represents the form for contact person
|
|
type ContactPersonForm struct {
|
|
FirstName string `json:"first_name" valid:"required,length(2|50)"`
|
|
LastName string `json:"last_name" valid:"required,length(2|50)"`
|
|
FullName string `json:"full_name" valid:"required,length(2|100)"`
|
|
Position string `json:"position" valid:"required,length(2|100)"`
|
|
Email string `json:"email" valid:"required,email"`
|
|
Phone string `json:"phone" valid:"required,length(10|20)"`
|
|
Mobile *string `json:"mobile,omitempty" valid:"optional,length(10|20)"`
|
|
IsPrimary bool `json:"is_primary"`
|
|
}
|
|
|
|
// CompanyTagsForm represents the form for company tags
|
|
type CompanyTagsForm struct {
|
|
CPVCodes []string `json:"cpv_codes,omitempty" valid:"optional"`
|
|
Categories []string `json:"categories,omitempty" valid:"optional"`
|
|
Keywords []string `json:"keywords,omitempty" valid:"optional"`
|
|
Specializations []string `json:"specializations,omitempty" valid:"optional"`
|
|
Certifications []string `json:"certifications,omitempty" valid:"optional"`
|
|
}
|
|
|
|
// CompanyListResponse represents the response for listing companies
|
|
type CompanyListResponse struct {
|
|
Companies []*CompanyResponse `json:"companies"`
|
|
Total int64 `json:"total"`
|
|
Limit int `json:"limit"`
|
|
Offset int `json:"offset"`
|
|
TotalPages int `json:"total_pages"`
|
|
}
|
|
|
|
// Company search and matching DTOs
|
|
type CompanySearchForm struct {
|
|
Query *string `query:"q" valid:"optional"`
|
|
CPVCodes []string `query:"cpv_codes" valid:"optional"`
|
|
Categories []string `query:"categories" valid:"optional"`
|
|
Keywords []string `query:"keywords" valid:"optional"`
|
|
Specializations []string `query:"specializations" valid:"optional"`
|
|
Industry *string `query:"industry" valid:"optional"`
|
|
Location *string `query:"location" valid:"optional"`
|
|
MinEmployees *int `query:"min_employees" valid:"optional,min(1)"`
|
|
MaxEmployees *int `query:"max_employees" valid:"optional,min(1)"`
|
|
MinRevenue *float64 `query:"min_revenue" valid:"optional,min(0)"`
|
|
MaxRevenue *float64 `query:"max_revenue" valid:"optional,min(0)"`
|
|
IsVerified *bool `query:"is_verified" valid:"optional"`
|
|
IsCompliant *bool `query:"is_compliant" valid:"optional"`
|
|
Limit *int `query:"limit" valid:"optional,range(1|100)"`
|
|
Offset *int `query:"offset" valid:"optional,min(0)"`
|
|
}
|
|
|
|
// Company statistics DTOs
|
|
type CompanyStatsResponse struct {
|
|
TotalCompanies int64 `json:"total_companies"`
|
|
ActiveCompanies int64 `json:"active_companies"`
|
|
VerifiedCompanies int64 `json:"verified_companies"`
|
|
CompaniesByType map[string]int64 `json:"companies_by_type"`
|
|
CompaniesByIndustry map[string]int64 `json:"companies_by_industry"`
|
|
CompaniesByStatus map[string]int64 `json:"companies_by_status"`
|
|
TopCategories []CategoryCount `json:"top_categories"`
|
|
TopCPVCodes []CPVCodeCount `json:"top_cpv_codes"`
|
|
}
|
|
|
|
type CategoryCount struct {
|
|
Category string `json:"category"`
|
|
Count int64 `json:"count"`
|
|
}
|
|
|
|
type CPVCodeCount struct {
|
|
CPVCode string `json:"cpv_code"`
|
|
Count int64 `json:"count"`
|
|
}
|