Enhance tender repository and service with AI procedure reference handling
continuous-integration/drone/push Build is passing

- Introduced `ProcedureReference` struct to encapsulate AI procedure coordinates for better data management.
- Added `GetByProcedureReferences` method in the `TenderRepository` to retrieve multiple tenders based on AI procedure references in a single query.
- Updated the `resolveRecommendedTenders` method in the service layer to utilize the new repository method, improving efficiency in fetching recommended tenders.
- Enhanced error handling and logging for the new repository method to ensure robust operation.

This update improves the handling of AI procedure references, streamlining tender retrieval processes and enhancing overall system performance.
This commit is contained in:
Mazyar
2026-06-21 15:43:58 +03:30
parent fa258020f1
commit db14bfe270
3 changed files with 93 additions and 13 deletions
+16 -13
View File
@@ -1672,6 +1672,7 @@ func (s *tenderService) enrichDocumentsScrapedFilter(ctx context.Context, form *
func (s *tenderService) resolveRecommendedTenders(ctx context.Context, recommendations []company.RecommendedTenderResponse) (map[string]Tender, error) {
out := make(map[string]Tender)
procRefs := make([]ProcedureReference, 0, len(recommendations))
mongoIDs := make([]string, 0)
for _, rec := range recommendations {
@@ -1681,19 +1682,11 @@ func (s *tenderService) resolveRecommendedTenders(ctx context.Context, recommend
}
if folder, notice, ok := ParseAIProcedureRef(ref); ok {
tender, err := s.repository.GetByProcedureReference(ctx, folder, notice)
if err != nil {
if errors.Is(err, orm.ErrDocumentNotFound) {
s.logger.Warn("Recommended tender not found by procedure reference", map[string]interface{}{
"tender_ref": ref,
"contract_folder_id": folder,
"notice_publication_id": notice,
})
continue
}
return nil, fmt.Errorf("failed to load recommended tender %s: %w", ref, err)
}
out[ref] = *tender
procRefs = append(procRefs, ProcedureReference{
Ref: ref,
ContractFolderID: folder,
NoticePublicationID: notice,
})
continue
}
@@ -1707,6 +1700,16 @@ func (s *tenderService) resolveRecommendedTenders(ctx context.Context, recommend
})
}
if len(procRefs) > 0 {
byProcedure, err := s.repository.GetByProcedureReferences(ctx, procRefs)
if err != nil {
return nil, fmt.Errorf("failed to load recommended tenders by procedure reference: %w", err)
}
for ref, tender := range byProcedure {
out[ref] = tender
}
}
if len(mongoIDs) == 0 {
return out, nil
}