diff --git a/internal/tender/form.go b/internal/tender/form.go index a80c453..386c773 100644 --- a/internal/tender/form.go +++ b/internal/tender/form.go @@ -58,6 +58,7 @@ type SearchForm struct { SubmissionDateTo *int64 `query:"submission_date_to" valid:"optional"` Source []string `query:"source" valid:"optional"` BuyerOrganizationID *string `query:"buyer_organization_id" valid:"optional"` + NoticePublicationID *string `query:"notice_publication_id" valid:"optional"` Languages []string `query:"languages" valid:"optional"` OnlyActiveDeadlines bool `query:"-" valid:"optional"` Language *string `query:"lang" valid:"optional"` diff --git a/internal/tender/handler.go b/internal/tender/handler.go index db45636..92e6196 100644 --- a/internal/tender/handler.go +++ b/internal/tender/handler.go @@ -158,6 +158,7 @@ func (h *TenderHandler) Delete(c echo.Context) error { // @Param submission_date_to query number false "Submission deadline to (Unix timestamp, seconds)" // @Param languages query []string false "Filter by languages (comma-separated)" // @Param buyer_organization_id query string false "Filter by buyer organization ID" +// @Param notice_publication_id query string false "Filter by TED notice publication ID" // @Param documents_scraped query bool false "When true, only tenders whose contract_folder_id has documents in MinIO" // @Param limit query int false "Number of items per page (default: 20, max: 100)" // @Param offset query int false "Number of items to skip (default: 0). Prefer cursor for deep pages." @@ -229,6 +230,7 @@ func (h *TenderHandler) Search(c echo.Context) error { // @Param submission_date_to query number false "Submission deadline to (Unix seconds)" // @Param languages query []string false "Filter by languages (comma-separated)" // @Param buyer_organization_id query string false "Filter by buyer organization ID" +// @Param notice_publication_id query string false "Filter by TED notice publication ID" // @Param documents_scraped query bool false "When true, only tenders whose contract_folder_id has documents in MinIO" // @Param limit query int false "Number of items per page (default: 20, max: 100)" // @Param offset query int false "Number of items to skip (default: 0). Prefer cursor for deep pages." @@ -312,6 +314,7 @@ func (h *TenderHandler) GetPublicTenders(c echo.Context) error { // @Param submission_date_to query number false "Submission deadline to (Unix seconds)" // @Param languages query []string false "Filter by languages (comma-separated)" // @Param buyer_organization_id query string false "Filter by buyer organization ID" +// @Param notice_publication_id query string false "Filter by TED notice publication ID" // @Param documents_scraped query bool false "When true, only tenders whose contract_folder_id has documents in MinIO" // @Param limit query int false "Number of items per page (default: 20, max: 100)" // @Param offset query int false "Number of items to skip (default: 0). Prefer cursor for deep pages." diff --git a/internal/tender/repository.go b/internal/tender/repository.go index abe4559..9ff17eb 100644 --- a/internal/tender/repository.go +++ b/internal/tender/repository.go @@ -1062,6 +1062,12 @@ func (r *tenderRepository) buildSearchFilter(form *SearchForm) bson.M { filter["buyer_organization.id"] = *form.BuyerOrganizationID } + if form.NoticePublicationID != nil { + if noticePublicationID := strings.TrimSpace(*form.NoticePublicationID); noticePublicationID != "" { + filter["notice_publication_id"] = noticePublicationID + } + } + if len(form.Languages) > 0 { filter["notice_language_code"] = bson.M{"$in": dedupeNonEmptyStrings(form.Languages)} }