posts: move expunged image to trash folder.

When a post is expunged, move the image to a trash folder so it can be
recovered if needed.
This commit is contained in:
evazion
2022-05-03 04:40:47 -05:00
parent c07b099bf8
commit ac98c142a4
4 changed files with 45 additions and 15 deletions

View File

@@ -50,6 +50,24 @@ class StorageManager
raise NotImplementedError, "open not implemented"
end
# Copy the file from src_path to dest_path.
#
# @param src_path [String] The file to copy.
# @param dest_path [String] The location to copy the file to.
def copy(src_path, dest_path)
file = open(src_path)
store(file, dest_path)
end
# Move the file from src_path to dest_path.
#
# @param src_path [String] The file to move.
# @param dest_path [String] The location to move the file to.
def move(src_path, dest_path)
copy(src_path, dest_path)
delete(src_path)
end
# Return the full URL of the file at the given path, or nil if the file
# doesn't have an URL.
# @return [String, nil] the file URL

View File

@@ -24,8 +24,7 @@ class MediaAsset < ApplicationRecord
# Processing: The asset's files are currently being resized and distributed to the backend servers.
# Active: The asset has been successfully uploaded and is ready to use.
# Deleted: The asset's files have been deleted by moving them to a trash folder. They can be undeleted
# by moving them out of the trash folder. (Not implemented yet).
# Deleted: The asset's files have been deleted by moving them to a trash folder. They can be undeleted by moving them out of the trash folder.
# Expunged: The asset's files have been permanently deleted.
# Failed: The asset failed to upload. The asset may be in a partially uploaded state, with some
# files missing or incompletely transferred.
@@ -62,6 +61,11 @@ class MediaAsset < ApplicationRecord
backup_storage_service.store(file, file_path)
end
def trash_file!
storage_service.move(file_path, "/trash/#{file_path}")
backup_storage_service.move(file_path, "/trash/#{file_path}")
end
def delete_file!
storage_service.delete(file_path)
backup_storage_service.delete(file_path)
@@ -276,6 +280,14 @@ class MediaAsset < ApplicationRecord
raise
end
def trash!
variants.each(&:trash_file!)
update!(status: :deleted)
rescue
update!(status: :failed)
raise
end
def delete_files!
variants.each(&:delete_file!)
end

View File

@@ -756,7 +756,7 @@ class Post < ApplicationRecord
decrement_tag_post_counts
remove_from_all_pools
remove_from_fav_groups
media_asset.expunge!
media_asset.trash!
destroy
update_parent_on_destroy
end