diff --git a/app/services/exception_reporter.rb b/app/services/exception_reporter.rb index 297f11fb..c3b4f44a 100644 --- a/app/services/exception_reporter.rb +++ b/app/services/exception_reporter.rb @@ -4,6 +4,8 @@ class ExceptionReporter def self.call(exception) return unless DawarichSettings.self_hosted? + Rails.logger.error "Exception: #{exception.message}" + Sentry.capture_exception(exception) end end diff --git a/app/services/users/export_data.rb b/app/services/users/export_data.rb index bf7b29da..527ad2ae 100644 --- a/app/services/users/export_data.rb +++ b/app/services/users/export_data.rb @@ -280,7 +280,9 @@ class Users::ExportData rescue StandardError => e # Mark export as failed if an error occurs export_record.update!(status: :failed) if export_record - Rails.logger.error "Export failed: #{e.message}" + + ExceptionReporter.call(e) + raise e ensure # Cleanup temporary files @@ -332,8 +334,7 @@ class Users::ExportData Rails.logger.info "Cleaning up temporary export directory: #{export_directory}" FileUtils.rm_rf(export_directory) rescue StandardError => e - Rails.logger.error "Failed to cleanup temporary files: #{e.message}" - # Don't re-raise the error as cleanup failure shouldn't break the export + ExceptionReporter.call(e) end def create_success_notification diff --git a/app/services/users/export_data/exports.rb b/app/services/users/export_data/exports.rb index d65bbcfd..45555a4f 100644 --- a/app/services/users/export_data/exports.rb +++ b/app/services/users/export_data/exports.rb @@ -51,7 +51,8 @@ class Users::ExportData::Exports download_and_save_export_file(export, file_path) add_file_metadata_to_export(export, export_hash, sanitized_filename) rescue StandardError => e - Rails.logger.error "Failed to download export file #{export.id}: #{e.message}" + ExceptionReporter.call(e) + export_hash['file_error'] = "Failed to download: #{e.message}" end end diff --git a/app/services/users/export_data/imports.rb b/app/services/users/export_data/imports.rb index 1aab8c50..8a7c2b40 100644 --- a/app/services/users/export_data/imports.rb +++ b/app/services/users/export_data/imports.rb @@ -51,7 +51,8 @@ class Users::ExportData::Imports download_and_save_import_file(import, file_path) add_file_metadata_to_import(import, import_hash, sanitized_filename) rescue StandardError => e - Rails.logger.error "Failed to download import file #{import.id}: #{e.message}" + ExceptionReporter.call(e) + import_hash['file_error'] = "Failed to download: #{e.message}" end end diff --git a/spec/services/users/export_data/areas_spec.rb b/spec/services/users/export_data/areas_spec.rb index b234aa2f..98065a77 100644 --- a/spec/services/users/export_data/areas_spec.rb +++ b/spec/services/users/export_data/areas_spec.rb @@ -6,11 +6,12 @@ RSpec.describe Users::ExportData::Areas, type: :service do let(:user) { create(:user) } let(:service) { described_class.new(user) } + subject { service.call } + describe '#call' do context 'when user has no areas' do it 'returns an empty array' do - result = service.call - expect(result).to eq([]) + expect(subject).to eq([]) end end @@ -18,8 +19,6 @@ RSpec.describe Users::ExportData::Areas, type: :service do let!(:area1) { create(:area, user: user, name: 'Home', radius: 100) } let!(:area2) { create(:area, user: user, name: 'Work', radius: 200) } - subject { service.call } - it 'returns all user areas' do expect(subject).to be_an(Array) expect(subject.size).to eq(2) @@ -49,8 +48,6 @@ RSpec.describe Users::ExportData::Areas, type: :service do let!(:user_area) { create(:area, user: user, name: 'User Area') } let!(:other_user_area) { create(:area, user: other_user, name: 'Other User Area') } - subject { service.call } - it 'only returns areas for the specified user' do expect(subject.size).to eq(1) expect(subject.first['name']).to eq('User Area')