Advanced search

This commit is contained in:
Mazyar
2026-05-11 11:25:41 +03:30
parent eb6706e061
commit 8ba667e4f4
4 changed files with 304 additions and 67 deletions
+45 -21
View File
@@ -15,27 +15,47 @@ type UpdateTenderRequest struct {
// SearchForm represents a request to list tenders with pagination and filtering
type SearchForm struct {
Search *string `query:"q" valid:"optional"`
NoticeType *string `query:"notice_type" valid:"optional"`
ProcurementType *string `query:"procurement_type" valid:"optional"`
CountryCodes []string `query:"country_codes" valid:"optional"`
RegionCodes []string `query:"region_codes" valid:"optional"`
CompanyID *string `query:"company_id" valid:"optional"`
CustomerID *string `query:"customer_id" valid:"optional"`
Status []string `query:"status" valid:"optional"`
Classifications []string `query:"classifications" valid:"optional"`
MinEstimatedValue *float64 `query:"min_estimated_value" valid:"optional"`
MaxEstimatedValue *float64 `query:"max_estimated_value" valid:"optional"`
Currency string `query:"currency" valid:"optional"`
DeadlineFrom *int64 `query:"deadline_from" valid:"optional"`
DeadlineTo *int64 `query:"deadline_to" valid:"optional"`
PublicationDateFrom *int64 `query:"publication_date_from" valid:"optional"`
PublicationDateTo *int64 `query:"publication_date_to" valid:"optional"`
Source []string `query:"source" valid:"optional"`
BuyerOrganizationID *string `query:"buyer_organization_id" valid:"optional"`
Languages []string `query:"languages" valid:"optional"`
OnlyActiveDeadlines bool `query:"-" valid:"optional"`
Language *string `query:"lang" valid:"optional"`
Search *string `query:"q" valid:"optional"`
Title *string `query:"title" valid:"optional"`
Description *string `query:"description" valid:"optional"`
NoticeType *string `query:"notice_type" valid:"optional"`
NoticeTypes []string `query:"notice_types" valid:"optional"`
FormTypes []string `query:"form_types" valid:"optional"`
ProcurementType *string `query:"procurement_type" valid:"optional"`
Country *string `query:"country" valid:"optional"`
CountryCode *string `query:"country_code" valid:"optional"`
CountryCodes []string `query:"country_codes" valid:"optional"`
RegionCodes []string `query:"region_codes" valid:"optional"`
CompanyID *string `query:"company_id" valid:"optional"`
CustomerID *string `query:"customer_id" valid:"optional"`
Status []string `query:"status" valid:"optional"`
MainClassification *string `query:"main_classification" valid:"optional"`
Classifications []string `query:"classifications" valid:"optional"`
CpvCodes []string `query:"cpv_codes" valid:"optional"`
MinEstimatedValue *float64 `query:"min_estimated_value" valid:"optional"`
MaxEstimatedValue *float64 `query:"max_estimated_value" valid:"optional"`
Currency string `query:"currency" valid:"optional"`
CreatedAt *int64 `query:"created_at" valid:"optional"`
CreatedAtFrom *int64 `query:"created_at_from" valid:"optional"`
CreatedAtTo *int64 `query:"created_at_to" valid:"optional"`
TenderDeadline *int64 `query:"tender_deadline" valid:"optional"`
TenderDeadlineFrom *int64 `query:"tender_deadline_from" valid:"optional"`
TenderDeadlineTo *int64 `query:"tender_deadline_to" valid:"optional"`
DeadlineFrom *int64 `query:"deadline_from" valid:"optional"`
DeadlineTo *int64 `query:"deadline_to" valid:"optional"`
PublicationDate *int64 `query:"publication_date" valid:"optional"`
PublicationDateFrom *int64 `query:"publication_date_from" valid:"optional"`
PublicationDateTo *int64 `query:"publication_date_to" valid:"optional"`
SubmissionDeadline *int64 `query:"submission_deadline" valid:"optional"`
SubmissionDateAliasFrom *int64 `query:"submission_deadline_from" valid:"optional"`
SubmissionDateAliasTo *int64 `query:"submission_deadline_to" valid:"optional"`
SubmissionDateFrom *int64 `query:"submission_date_from" valid:"optional"`
SubmissionDateTo *int64 `query:"submission_date_to" valid:"optional"`
Source []string `query:"source" valid:"optional"`
BuyerOrganizationID *string `query:"buyer_organization_id" valid:"optional"`
Languages []string `query:"languages" valid:"optional"`
OnlyActiveDeadlines bool `query:"-" valid:"optional"`
Language *string `query:"lang" valid:"optional"`
}
// SearchResponse represents the response for listing tenders
@@ -48,10 +68,12 @@ type SearchResponse struct {
type TenderResponse struct {
ID string `json:"id"`
NoticePublicationID string `json:"notice_publication_id"`
NoticeTypeCode string `json:"notice_type_code"`
Title string `json:"title"`
Description string `json:"description"`
ProcurementTypeCode string `json:"procurement_type_code"`
ProcedureCode string `json:"procedure_code"`
MainClassification string `json:"main_classification"`
EstimatedValue float64 `json:"estimated_value"`
Currency string `json:"currency"`
Duration string `json:"duration"`
@@ -115,10 +137,12 @@ func (t *Tender) ToResponseWithLanguage(language string) *TenderResponse {
response := &TenderResponse{
ID: t.ID.Hex(),
NoticePublicationID: t.NoticePublicationID,
NoticeTypeCode: t.NoticeTypeCode,
Title: title,
Description: description,
ProcurementTypeCode: t.ProcurementTypeCode,
ProcedureCode: t.ProcedureCode,
MainClassification: t.MainClassification,
EstimatedValue: t.EstimatedValue,
Currency: t.Currency,
Duration: t.Duration,