Browse Source

Removing gaps caused by empty exports

pull/591/head
Stéphane Meny 3 years ago
parent
commit
17c6adba63
No known key found for this signature in database
GPG Key ID: 9D0AFEA988527923
  1. 17
      app/services/exports/case_log_export_service.rb
  2. 5
      db/migrate/20220519112604_add_empty_export_to_logs_exports.rb
  3. 3
      db/schema.rb
  4. 12
      spec/services/exports/case_log_export_service_spec.rb

17
app/services/exports/case_log_export_service.rb

@ -18,7 +18,8 @@ module Exports
def export_case_logs(full_update: false) def export_case_logs(full_update: false)
start_time = Time.zone.now start_time = Time.zone.now
case_logs = retrieve_case_logs(start_time, full_update) case_logs = retrieve_case_logs(start_time, full_update)
export = build_export_run(start_time, full_update) empty_export = case_logs.empty?
export = build_export_run(start_time, full_update, empty_export)
daily_run = get_daily_run_number daily_run = get_daily_run_number
archive_datetimes = write_export_archive(export, case_logs) archive_datetimes = write_export_archive(export, case_logs)
write_master_manifest(daily_run, archive_datetimes) write_master_manifest(daily_run, archive_datetimes)
@ -38,13 +39,15 @@ module Exports
LogsExport.where(created_at: today.beginning_of_day..today.end_of_day).count + 1 LogsExport.where(created_at: today.beginning_of_day..today.end_of_day).count + 1
end end
def build_export_run(current_time, full_update) def build_export_run(current_time, full_update, empty_export)
if LogsExport.count.zero? previous_exports_with_data = LogsExport.where(empty_export: false)
return LogsExport.new(started_at: current_time)
if previous_exports_with_data.empty?
return LogsExport.new(started_at: current_time, empty_export:)
end end
base_number = LogsExport.maximum(:base_number) base_number = previous_exports_with_data.maximum(:base_number)
increment_number = LogsExport.where(base_number:).maximum(:increment_number) increment_number = previous_exports_with_data.where(base_number:).maximum(:increment_number)
if full_update if full_update
base_number += 1 base_number += 1
@ -53,7 +56,7 @@ module Exports
increment_number += 1 increment_number += 1
end end
LogsExport.new(started_at: current_time, base_number:, increment_number:) LogsExport.new(started_at: current_time, base_number:, increment_number:, empty_export:)
end end
def write_master_manifest(daily_run, archive_datetimes) def write_master_manifest(daily_run, archive_datetimes)

5
db/migrate/20220519112604_add_empty_export_to_logs_exports.rb

@ -0,0 +1,5 @@
class AddEmptyExportToLogsExports < ActiveRecord::Migration[7.0]
def change
add_column :logs_exports, :empty_export, :boolean, default: false, null: false
end
end

3
db/schema.rb

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2022_05_18_115438) do ActiveRecord::Schema[7.0].define(version: 2022_05_19_112604) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -263,6 +263,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_05_18_115438) do
t.datetime "started_at", precision: nil, null: false t.datetime "started_at", precision: nil, null: false
t.integer "base_number", default: 1, null: false t.integer "base_number", default: 1, null: false
t.integer "increment_number", default: 1, null: false t.integer "increment_number", default: 1, null: false
t.boolean "empty_export", default: false, null: false
end end
create_table "organisation_las", force: :cascade do |t| create_table "organisation_las", force: :cascade do |t|

12
spec/services/exports/case_log_export_service_spec.rb

@ -166,7 +166,7 @@ RSpec.describe Exports::CaseLogExportService do
end end
end end
context "and a previous export has run the same day with logs" do context "and a previous export has run the same day having case logs" do
before do before do
FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 2, 1)) FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 2, 1))
export_service.export_case_logs export_service.export_case_logs
@ -203,6 +203,16 @@ RSpec.describe Exports::CaseLogExportService do
end end
end end
context "and a previous export has run the having no case logs" do
before { export_service.export_case_logs }
it "doesn't increment the manifest number by 1" do
export_service.export_case_logs
expect(LogsExport.last.increment_number).to eq(1)
end
end
context "and the export has an error" do context "and the export has an error" do
before { allow(storage_service).to receive(:write_file).and_raise(StandardError.new("This is an exception")) } before { allow(storage_service).to receive(:write_file).and_raise(StandardError.new("This is an exception")) }

Loading…
Cancel
Save