package document_scraper // DocumentScraperListRequest represents the request to list tenders pending document scraping type DocumentScraperListRequest struct { Limit int `query:"limit" valid:"optional,range(1|100)"` Offset int `query:"offset" valid:"optional,range(0|1000000)"` CreatedAtFrom *int64 `query:"created_at_from" valid:"optional"` CreatedAtTo *int64 `query:"created_at_to" valid:"optional"` IncludeExpired bool `query:"include_expired" valid:"optional"` } // Normalize applies default pagination bounds. func (r *DocumentScraperListRequest) Normalize() { if r.Limit <= 0 { r.Limit = 20 } if r.Limit > 100 { r.Limit = 100 } if r.Offset < 0 { r.Offset = 0 } } // DocumentScraperGetRequest represents the request to get a specific tender by notice publication ID type DocumentScraperGetRequest struct { NoticeID string `param:"notice_id" valid:"required~Notice ID is required"` } // DocumentScraperTenderResponse is the minimal payload for the document scraper pipeline. // // ContractFolderID and NoticePublicationID are used to build MinIO paths: // // PROC_//documents/ // PROC_//tender.json type DocumentScraperTenderResponse struct { ContractFolderID string `json:"contract_folder_id"` NoticePublicationID string `json:"notice_publication_id"` DocumentURL string `json:"document_url"` Title string `json:"title"` Description string `json:"description"` } // DocumentScraperListResponse represents the paginated list response type DocumentScraperListResponse struct { Tenders []DocumentScraperTenderResponse `json:"tenders"` }