|
3 | 3 | require 'authorized_key' |
4 | 4 | require 'export_to_ocn_job' |
5 | 5 | require 'delete_from_ocn_job' |
| 6 | +require 'registry_changeset_sync' |
| 7 | +require 'envelope_resource_sync_event' |
6 | 8 | require 'envelope_version' |
7 | 9 | require_relative 'extensions/transactionable_envelope' |
8 | 10 | require_relative 'extensions/learning_registry_resources' |
@@ -46,10 +48,10 @@ class Envelope < ActiveRecord::Base |
46 | 48 | before_validation :process_resource, :process_headers |
47 | 49 | before_save :assign_last_verified_on |
48 | 50 | after_save :update_headers |
49 | | - after_save :upload_to_s3 |
50 | 51 | before_destroy :delete_description_sets, prepend: true |
| 52 | + before_destroy :record_resource_sync_delete_events, prepend: true |
51 | 53 | after_destroy :delete_from_ocn |
52 | | - after_destroy :delete_from_s3 |
| 54 | + after_commit :schedule_s3_delete, on: :destroy |
53 | 55 | after_commit :export_to_ocn |
54 | 56 |
|
55 | 57 | validates :envelope_community, :envelope_type, :envelope_version, |
@@ -271,11 +273,48 @@ def export_to_ocn |
271 | 273 | ExportToOCNJob.perform_later(id) |
272 | 274 | end |
273 | 275 |
|
274 | | - def upload_to_s3 |
275 | | - SyncEnvelopeGraphWithS3.upload(self) |
| 276 | + def schedule_s3_delete |
| 277 | + return if envelope_ceterms_ctid.blank? || envelope_community.blank? |
| 278 | + |
| 279 | + RegistryChangesetSync.record_activity!( |
| 280 | + envelope_community, |
| 281 | + version_id: latest_s3_sync_version_id, |
| 282 | + resource_event_id: @last_resource_sync_event_id_for_destroy |
| 283 | + ) |
| 284 | + end |
| 285 | + |
| 286 | + def latest_s3_sync_version_id |
| 287 | + EnvelopeVersion |
| 288 | + .where(item_type: self.class.name, item_id: id) |
| 289 | + .maximum(:id) |
| 290 | + end |
| 291 | + |
| 292 | + def latest_resource_sync_event_id |
| 293 | + EnvelopeResourceSyncEvent |
| 294 | + .where(envelope_community: envelope_community) |
| 295 | + .maximum(:id) |
276 | 296 | end |
277 | 297 |
|
278 | | - def delete_from_s3 |
279 | | - SyncEnvelopeGraphWithS3.remove(self) |
| 298 | + def record_resource_sync_delete_events |
| 299 | + return if envelope_ceterms_ctid.blank? || envelope_community.blank? |
| 300 | + |
| 301 | + resource_ids = envelope_resources.pluck(:resource_id) |
| 302 | + return if resource_ids.empty? |
| 303 | + |
| 304 | + now = Time.current |
| 305 | + |
| 306 | + EnvelopeResourceSyncEvent.insert_all!( |
| 307 | + resource_ids.map do |resource_id| |
| 308 | + { |
| 309 | + envelope_community_id: envelope_community.id, |
| 310 | + resource_id: resource_id, |
| 311 | + action: EnvelopeResourceSyncEvent::ACTIONS[:delete], |
| 312 | + created_at: now, |
| 313 | + updated_at: now |
| 314 | + } |
| 315 | + end |
| 316 | + ) |
| 317 | + |
| 318 | + @last_resource_sync_event_id_for_destroy = latest_resource_sync_event_id |
280 | 319 | end |
281 | 320 | end |
0 commit comments