List and download tender documents - worker auto translation to english job
This commit is contained in:
@@ -25,6 +25,7 @@ type TenderRepository interface {
|
||||
GetExpiredTenders(ctx context.Context, beforeDate int64) ([]Tender, error)
|
||||
GetUnScrapedTenders(ctx context.Context, limit, skip int) ([]Tender, int64, error)
|
||||
GetUnSummarizedTenders(ctx context.Context, limit, skip int) ([]Tender, int64, error)
|
||||
GetUnTranslatedTenders(ctx context.Context, language string, limit, skip int) ([]Tender, int64, error)
|
||||
Update(ctx context.Context, tender *Tender) error
|
||||
Delete(ctx context.Context, id string) error
|
||||
GetStatistics(ctx context.Context) (*TenderStatistics, error)
|
||||
@@ -337,6 +338,52 @@ func (r *tenderRepository) GetUnSummarizedTenders(ctx context.Context, limit, sk
|
||||
return result.Items, result.TotalCount, nil
|
||||
}
|
||||
|
||||
// GetUnTranslatedTenders retrieves tenders that don't have a translation for the given language yet.
|
||||
func (r *tenderRepository) GetUnTranslatedTenders(ctx context.Context, language string, limit, skip int) ([]Tender, int64, error) {
|
||||
translationKey := "translations." + language
|
||||
metadataKey := "processing_metadata.translated_data." + language
|
||||
|
||||
filter := bson.M{
|
||||
"notice_publication_id": bson.M{"$ne": ""},
|
||||
"title": bson.M{"$ne": ""},
|
||||
"description": bson.M{"$ne": ""},
|
||||
"$and": []bson.M{
|
||||
{
|
||||
"$or": []bson.M{
|
||||
{translationKey: bson.M{"$exists": false}},
|
||||
{translationKey: nil},
|
||||
},
|
||||
},
|
||||
{
|
||||
"$or": []bson.M{
|
||||
{metadataKey: bson.M{"$exists": false}},
|
||||
{metadataKey: bson.M{"$ne": "done"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
pagination := orm.Pagination{
|
||||
Limit: limit,
|
||||
Skip: skip,
|
||||
SortField: "created_at",
|
||||
SortOrder: 1, // Oldest first
|
||||
}
|
||||
|
||||
result, err := r.ormRepo.FindAll(ctx, filter, pagination)
|
||||
if err != nil {
|
||||
r.logger.Error("Failed to get untranslated tenders", map[string]interface{}{
|
||||
"language": language,
|
||||
"limit": limit,
|
||||
"skip": skip,
|
||||
"error": err.Error(),
|
||||
})
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return result.Items, result.TotalCount, nil
|
||||
}
|
||||
|
||||
// GetStatistics calculates tender statistics using aggregation
|
||||
func (r *tenderRepository) GetStatistics(ctx context.Context) (*TenderStatistics, error) {
|
||||
stats := &TenderStatistics{
|
||||
|
||||
Reference in New Issue
Block a user