531f8e2baf
- Added a new field 'TenderID' to the TenderResponse structure, improving the data model for tender management. - Updated the ToTenderResponse method to include the TenderID in the response, ensuring consistency in API outputs. - This enhancement aligns with the ongoing improvements to the tender management system's data handling capabilities.
83 lines
3.8 KiB
Go
83 lines
3.8 KiB
Go
package tender
|
|
|
|
import "tm/pkg/response"
|
|
|
|
// UpdateTenderRequest represents a request to update an existing tender
|
|
type UpdateTenderRequest struct {
|
|
ID string `json:"id" valid:"required~Tender ID is required"`
|
|
Title *string `json:"title,omitempty" valid:"stringlength(1|500)~Title must be between 1 and 500 characters"`
|
|
Description *string `json:"description,omitempty" valid:"stringlength(0|5000)~Description must not exceed 5000 characters"`
|
|
Status *TenderStatus `json:"status,omitempty"`
|
|
EstimatedValue *float64 `json:"estimated_value,omitempty" valid:"range(0|999999999999)~Estimated value must be between 0 and 999999999999"`
|
|
Currency *string `json:"currency,omitempty" valid:"stringlength(3|3)~Currency must be 3 characters"`
|
|
TenderDeadline *int64 `json:"tender_deadline,omitempty"` // Unix milliseconds
|
|
}
|
|
|
|
// ListTendersRequest represents a request to list tenders with pagination and filtering
|
|
type ListTendersRequest struct {
|
|
Criteria TenderSearchCriteria `json:"criteria"`
|
|
Limit int `json:"limit" valid:"range(1|100)~Limit must be between 1 and 100"`
|
|
Offset int `json:"offset" valid:"range(0|999999)~Offset must be non-negative"`
|
|
CompanyID *string `json:"company_id,omitempty"` // Optional company ID for match percentage calculation
|
|
}
|
|
|
|
// ListTendersResponse represents the response for listing tenders
|
|
type ListTendersResponse struct {
|
|
Tenders []TenderResponse `json:"tenders"`
|
|
Metadata *response.Meta `json:"metadata"`
|
|
}
|
|
|
|
// TenderResponse represents a tender in API responses
|
|
type TenderResponse struct {
|
|
ID string `json:"id"`
|
|
NoticePublicationID string `json:"notice_publication_id"`
|
|
Title string `json:"title"`
|
|
Description string `json:"description"`
|
|
ProcurementTypeCode string `json:"procurement_type_code"`
|
|
ProcedureCode string `json:"procedure_code"`
|
|
EstimatedValue float64 `json:"estimated_value"`
|
|
Currency string `json:"currency"`
|
|
Duration string `json:"duration"`
|
|
DurationUnit string `json:"duration_unit"`
|
|
PublicationDate int64 `json:"publication_date"`
|
|
TenderDeadline int64 `json:"tender_deadline"`
|
|
SubmissionDeadline int64 `json:"submission_deadline"`
|
|
ApplicationDeadline int64 `json:"application_deadline"`
|
|
SubmissionURL string `json:"submission_url"`
|
|
CountryCode string `json:"country_code"`
|
|
BuyerOrganization *OrganizationResponse `json:"buyer_organization"`
|
|
Status TenderStatus `json:"status"`
|
|
TenderID string `json:"tender_id"`
|
|
}
|
|
|
|
type OrganizationResponse struct {
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// ToTenderResponse converts a Tender entity to TenderResponse
|
|
func (t *Tender) ToTenderResponse() *TenderResponse {
|
|
response := &TenderResponse{
|
|
ID: t.ID.Hex(),
|
|
NoticePublicationID: t.NoticePublicationID,
|
|
Title: t.Title,
|
|
Description: t.Description,
|
|
ProcurementTypeCode: t.ProcurementTypeCode,
|
|
ProcedureCode: t.ProcedureCode,
|
|
EstimatedValue: t.EstimatedValue,
|
|
Currency: t.Currency,
|
|
Duration: t.Duration,
|
|
DurationUnit: t.DurationUnit,
|
|
PublicationDate: t.PublicationDate,
|
|
TenderDeadline: t.TenderDeadline,
|
|
SubmissionDeadline: t.SubmissionDeadline,
|
|
ApplicationDeadline: t.ApplicationDeadline,
|
|
CountryCode: t.CountryCode,
|
|
SubmissionURL: t.SubmissionURL,
|
|
BuyerOrganization: &OrganizationResponse{Name: t.BuyerOrganization.Name},
|
|
Status: t.Status,
|
|
TenderID: t.TenderID,
|
|
}
|
|
|
|
return response
|
|
}
|