40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'app/workers/packages/ai_translation_worker.rb', line 40
def perform(translation_id, package_id, package_type, source_language, target_languages, target_fields, only_blank_languages, only_blank_fields)
BUSINESS_LOGGER.set_business_context({ package_id: package_id, package_type: package_type,
translation_id: translation_id })
BUSINESS_LOGGER.info('Starting full package AI translation', {
source_language: source_language,
target_languages: target_languages,
target_fields: target_fields,
only_blank_languages: only_blank_languages,
only_blank_fields: only_blank_fields,
})
package_class = get_package_class(package_type)
unless package_class
error_message = "Invalid package type: #{package_type}"
store_translation_error(translation_id, error_message)
BUSINESS_LOGGER.error('Package translation failed', { error: error_message })
return
end
package = package_class.find_by(id: package_id)
unless package
error_message = 'Package not found'
store_translation_error(translation_id, error_message)
BUSINESS_LOGGER.error('Package translation failed', { error: error_message })
return
end
translation_service = Packages::AiTranslationService.new(
package,
source_language: source_language,
target_languages: target_languages,
target_fields: target_fields,
only_blank_languages: only_blank_languages,
only_blank_fields: only_blank_fields,
)
result = translation_service.call
if result[:success]
translations = result[:translations] || {}
store_translation_result(translation_id, translations, result[:message])
BUSINESS_LOGGER.info('Full package translation completed successfully', {
translation_id: translation_id,
languages_translated: translations.keys.size,
fields_count: translations.values.first&.keys&.size || 0,
})
else
error_message = result[:message] || 'Translation failed'
store_translation_error(translation_id, error_message)
BUSINESS_LOGGER.error('Full package translation failed', {
translation_id: translation_id,
error: error_message,
})
end
rescue StandardError => e
APMErrorHandler.report(e, context: {
translation_id: translation_id,
package_id: package_id,
package_type: package_type,
source_language: source_language,
target_languages: target_languages,
})
error_message = "Unexpected error: #{e.message}"
store_translation_error(translation_id, error_message)
BUSINESS_LOGGER.error('Full package translation encountered error', {
translation_id: translation_id,
error: error_message,
backtrace: e.backtrace.first(5),
})
end
|