From fd89371bdf9b0c12bdee775c66efc96f38950af3 Mon Sep 17 00:00:00 2001 From: "m.nazemi" Date: Sat, 11 Apr 2026 18:15:13 +0330 Subject: [PATCH] tender duplication fix --- ted/scraper.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ted/scraper.go b/ted/scraper.go index 143d3e2..76b011c 100644 --- a/ted/scraper.go +++ b/ted/scraper.go @@ -323,6 +323,24 @@ func (s *TEDScraper) processXMLContent(ctx context.Context, content []byte, file t := s.mapToTenderFromParsedDoc(notice, "", fileName) t.ContentXML = string(content) + // Check if tender already exists to prevent duplicates + existingTender, err := s.findTenderByContractNoticeID(ctx, t.ContractNoticeID) + if err != nil { + s.logger.Error("Failed to check existing tender", map[string]interface{}{ + "contract_notice_id": t.ContractNoticeID, + "error": err.Error(), + }) + return fmt.Errorf("failed to check existing tender: %w", err) + } + + if existingTender != nil { + s.logger.Info("Tender already exists, skipping duplicate", map[string]interface{}{ + "contract_notice_id": t.ContractNoticeID, + "existing_id": existingTender.ID, + }) + return nil + } + // Create new tender s.logger.Info("Creating new tender", map[string]interface{}{ "contract_notice_id": t.ContractNoticeID,