From 2261b09b25a5195fc1a034687d423a2a8f3b050b Mon Sep 17 00:00:00 2001 From: Rodribm10 Date: Sun, 19 Apr 2026 01:09:28 -0300 Subject: [PATCH] feat(captain-memory): add HardDeleteExpiredJob with daily cron (LGPD) --- config/schedule.yml | 6 ++++++ .../contact_memories/hard_delete_expired_job.rb | 10 ++++++++++ .../hard_delete_expired_job_spec.rb | 15 +++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 enterprise/app/jobs/captain/contact_memories/hard_delete_expired_job.rb create mode 100644 spec/enterprise/jobs/captain/contact_memories/hard_delete_expired_job_spec.rb diff --git a/config/schedule.yml b/config/schedule.yml index bbddd7346..7874ebe55 100644 --- a/config/schedule.yml +++ b/config/schedule.yml @@ -113,3 +113,9 @@ captain_contact_memory_aging_job: cron: '0 3 * * 0' class: 'Captain::ContactMemories::AgingJob' queue: scheduled_jobs + +# daily at 03:30 UTC - hard-delete soft-deleted contact memories older than 30 days (LGPD) +captain_contact_memory_hard_delete_job: + cron: '30 3 * * *' + class: 'Captain::ContactMemories::HardDeleteExpiredJob' + queue: scheduled_jobs diff --git a/enterprise/app/jobs/captain/contact_memories/hard_delete_expired_job.rb b/enterprise/app/jobs/captain/contact_memories/hard_delete_expired_job.rb new file mode 100644 index 000000000..bc8b1e216 --- /dev/null +++ b/enterprise/app/jobs/captain/contact_memories/hard_delete_expired_job.rb @@ -0,0 +1,10 @@ +class Captain::ContactMemories::HardDeleteExpiredJob < ApplicationJob + queue_as :scheduled_jobs + + RETENTION_DAYS = 30 + + def perform + count = Captain::ContactMemory.where('deleted_at < ?', RETENTION_DAYS.days.ago).delete_all + Rails.logger.info("[ContactMemory::HardDeleteExpiredJob] hard-deleted #{count} records") + end +end diff --git a/spec/enterprise/jobs/captain/contact_memories/hard_delete_expired_job_spec.rb b/spec/enterprise/jobs/captain/contact_memories/hard_delete_expired_job_spec.rb new file mode 100644 index 000000000..caafb36a7 --- /dev/null +++ b/spec/enterprise/jobs/captain/contact_memories/hard_delete_expired_job_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +RSpec.describe Captain::ContactMemories::HardDeleteExpiredJob do + it 'destroys records soft-deleted more than 30 days ago' do + old = create(:captain_contact_memory, deleted_at: 40.days.ago) + recent = create(:captain_contact_memory, deleted_at: 10.days.ago) + active = create(:captain_contact_memory, deleted_at: nil) + + described_class.perform_now + + expect(Captain::ContactMemory.exists?(old.id)).to be(false) + expect(Captain::ContactMemory.exists?(recent.id)).to be(true) + expect(Captain::ContactMemory.exists?(active.id)).to be(true) + end +end