cache translation in minio instead of mongo
This commit is contained in:
@@ -269,14 +269,11 @@ func (s *tenderService) Update(ctx context.Context, req UpdateTenderRequest) (*T
|
||||
}
|
||||
|
||||
// Update fields if provided
|
||||
translationSourceChanged := false
|
||||
if req.Title != nil {
|
||||
tender.Title = *req.Title
|
||||
translationSourceChanged = true
|
||||
}
|
||||
if req.Description != nil {
|
||||
tender.Description = *req.Description
|
||||
translationSourceChanged = true
|
||||
}
|
||||
if req.Status != nil {
|
||||
tender.Status = *req.Status
|
||||
@@ -290,11 +287,6 @@ func (s *tenderService) Update(ctx context.Context, req UpdateTenderRequest) (*T
|
||||
if req.TenderDeadline != nil {
|
||||
tender.TenderDeadline = *req.TenderDeadline
|
||||
}
|
||||
if translationSourceChanged {
|
||||
tender.Translations = nil
|
||||
tender.ProcessingMetadata.TranslatedData = nil
|
||||
tender.ProcessingMetadata.TranslatedAt = 0
|
||||
}
|
||||
|
||||
if err := s.repository.Update(ctx, tender); err != nil {
|
||||
s.logger.Error("Failed to update tender", map[string]interface{}{
|
||||
@@ -1206,8 +1198,8 @@ func (s *tenderService) persistScrapedDocuments(ctx context.Context, t *Tender,
|
||||
}
|
||||
}
|
||||
|
||||
// TriggerAITranslate triggers on-demand AI translation for a tender and stores
|
||||
// translated result per language in MongoDB for future reuse.
|
||||
// TriggerAITranslate triggers on-demand AI translation for a tender. Results are
|
||||
// read from MinIO when available, otherwise fetched from the AI service (which persists to MinIO).
|
||||
func (s *tenderService) TriggerAITranslate(ctx context.Context, id, language string) (*AITranslateResponse, error) {
|
||||
if id == "" {
|
||||
return nil, fmt.Errorf("tender ID cannot be empty")
|
||||
@@ -1239,10 +1231,6 @@ func (s *tenderService) TriggerAITranslate(ctx context.Context, id, language str
|
||||
return nil, fmt.Errorf("tender has no contract folder ID")
|
||||
}
|
||||
|
||||
if tr, ok := t.Translations[targetLanguage]; ok && strings.TrimSpace(tr.Title) != "" {
|
||||
return s.buildAITranslateResponse(t, targetLanguage, tr.Title, tr.Description), nil
|
||||
}
|
||||
|
||||
title, description, err := s.resolveTranslation(ctx, t, targetLanguage)
|
||||
if err != nil {
|
||||
s.logger.Error("AI translation failed", map[string]interface{}{
|
||||
@@ -1254,11 +1242,6 @@ func (s *tenderService) TriggerAITranslate(ctx context.Context, id, language str
|
||||
return nil, fmt.Errorf("AI translation request failed: %w", err)
|
||||
}
|
||||
|
||||
s.storeTranslation(t, targetLanguage, title, description)
|
||||
if err := s.repository.Update(ctx, t); err != nil {
|
||||
return nil, fmt.Errorf("failed to persist translation: %w", err)
|
||||
}
|
||||
|
||||
return s.buildAITranslateResponse(t, targetLanguage, title, description), nil
|
||||
}
|
||||
|
||||
@@ -1302,24 +1285,6 @@ func (s *tenderService) resolveTranslation(ctx context.Context, t *Tender, langu
|
||||
return resp.TranslatedTitle, resp.TranslatedDescription, nil
|
||||
}
|
||||
|
||||
func (s *tenderService) storeTranslation(t *Tender, language, title, description string) {
|
||||
if t.Translations == nil {
|
||||
t.Translations = make(map[string]TranslationEntry)
|
||||
}
|
||||
now := time.Now().Unix()
|
||||
t.Translations[language] = TranslationEntry{
|
||||
Title: title,
|
||||
Description: description,
|
||||
Language: language,
|
||||
TranslatedAt: now,
|
||||
}
|
||||
if t.ProcessingMetadata.TranslatedData == nil {
|
||||
t.ProcessingMetadata.TranslatedData = make(map[string]string)
|
||||
}
|
||||
t.ProcessingMetadata.TranslatedData[language] = "done"
|
||||
t.ProcessingMetadata.TranslatedAt = now
|
||||
}
|
||||
|
||||
func (s *tenderService) pickResponseLanguage(language *string) string {
|
||||
if language != nil {
|
||||
clean := strings.ToLower(strings.TrimSpace(*language))
|
||||
|
||||
Reference in New Issue
Block a user