-
Notifications
You must be signed in to change notification settings - Fork 194
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Delete assets in Asset Manager when attachments are deleted #3853
Delete assets in Asset Manager when attachments are deleted #3853
Conversation
I want to delete the Asset Manager assets corresponding to Whitehall attachments when they are deleted. This is a first step towards making this possible. I chose to use the attachment notifier rather than the attachment data notifier, because the deleted state that is definitely changing is on the Attachment - the deleted state of the AttachmentData may or may not be changing, depending on the state of other Attachments which reference it.
I'm planning to wire this up to delete assets in Asset Manager for Whitehall attachments which are deleted. Given the ID of an AttachmentData which is considered as deleted, this worker will look up the AttachmentData and mark the corresponding Asset Manager asset as deleted, as well as the asset corresponding to the attachment's thumbnail image if appropriate.
I'm planning to wire this up to delete assets in Asset Manager for Whitehall attachments which are deleted. We've discussed inlining all the attachment-related service listener classes, but I'm going to leave that for now to keep the code more consistent.
This wires up an instance of ServiceListeners::AttachmentDeleter so that the Asset Manager assets corresponding to an AttachmentData are deleted via a Sidekiq worker. This will mark the relevant assets as deleted in Asset Manager. While there is functionality in the Asset Manager API to restore a deleted asset, there doesn't appear to be any such functionality in Whitehall. Note that the Asset Manager assets will only be deleted if no other non-deleted Attachment instances are still referencing the AttachmentData, i.e. where AttachmentData#deleted? is `true`. Also note that it looks as if when a (consultation) Response or a PolicyGroup is destroyed, the associated attachments are not deleted. While it's not obvious that it's possible to delete a Response via the user interface, it does appear to be possible to delete a PolicyGroup. While it doesn't feel appropriate to address this here, I'd recommend that for consistency and completeness, both of these problems should be fixed by calling Attachable#delete_all_attachments from a before/after destroy callback on Response and PolicyGroup. This would mean a 'destroy' event would be published to the attachment notifier for each attachment and the relevant assets would be deleted in Asset Manager.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good to me - good work!
Also note that it looks as if when a (consultation) Response or a PolicyGroup is destroyed, the associated attachments are not deleted. While it's not obvious that it's possible to delete a Response via the user interface, it does appear to be possible to delete a PolicyGroup.
Perhaps we should add an issue against Whitehall for this?
Thanks for reviewing.
I think it would be good to capture it somewhere, but I'm not sure the repo issues are monitored by the GOV.UK team. I'll investigate and try to capture the issue somewhere, but in the meantime I'm going to merge this. |
This wires up an instance of
ServiceListeners::AttachmentDeleter
so that the Asset Manager assets corresponding to anAttachmentData
are deleted via a Sidekiq worker.This will mark the relevant assets as deleted in Asset Manager. While there is functionality in the Asset Manager API to restore a deleted asset, there doesn't appear to be any such functionality in Whitehall.
Note that the Asset Manager assets will only be deleted if no other non-deleted Attachment instances are still referencing the
AttachmentData
, i.e. whereAttachmentData#deleted?
istrue
.Also note that it looks as if when a (consultation)
Response
or aPolicyGroup
is destroyed, the associated attachments are not destroyed. While it's not obvious that it's possible to delete aResponse
via the user interface, it does appear to be possible to delete aPolicyGroup
.While it doesn't feel appropriate to address this here, I'd recommend that for consistency and completeness, both of these problems should be fixed by calling
Attachable#delete_all_attachments
from a before/after destroy callback onResponse
andPolicyGroup
. This would mean a 'destroy' event would be published to the attachment notifier for each attachment and the relevant assets would be deleted in Asset Manager.