tenders document filter

This commit is contained in:
Mazyar
2026-05-20 16:03:30 +03:30
parent aa5e547d7b
commit 4390d7e1a6
3 changed files with 21 additions and 0 deletions
+1
View File
@@ -61,6 +61,7 @@ type SearchForm struct {
Languages []string `query:"languages" valid:"optional"`
OnlyActiveDeadlines bool `query:"-" valid:"optional"`
Language *string `query:"lang" valid:"optional"`
DocumentsScraped bool `query:"documents_scraped" valid:"optional"`
}
// SearchResponse represents the response for listing tenders
+3
View File
@@ -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 documents_scraped query bool false "When true, only tenders with scraped documents"
// @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."
// @Param cursor query string false "Opaque cursor from previous page meta.next_cursor"
@@ -228,6 +229,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 documents_scraped query bool false "When true, only tenders with scraped documents"
// @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."
// @Param cursor query string false "Opaque cursor from previous page meta.next_cursor"
@@ -310,6 +312,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 documents_scraped query bool false "When true, only tenders with scraped documents"
// @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."
// @Param cursor query string false "Opaque cursor from previous page meta.next_cursor"
+17
View File
@@ -1058,5 +1058,22 @@ func (r *tenderRepository) buildSearchFilter(form *SearchForm) bson.M {
filter["notice_language_code"] = bson.M{"$in": dedupeNonEmptyStrings(form.Languages)}
}
if form.DocumentsScraped {
scrapedClause := bson.M{
"$or": []bson.M{
{"processing_metadata.documents_scraped": true},
{"scraped_documents.0": bson.M{"$exists": true}},
},
}
if len(filter) == 0 {
return scrapedClause
}
if and, ok := filter["$and"].([]bson.M); ok {
filter["$and"] = append(and, scrapedClause)
} else {
filter["$and"] = []bson.M{filter, scrapedClause}
}
}
return filter
}