34 lines
880 B
Ruby
34 lines
880 B
Ruby
class User::DataExport < Export
|
|
private
|
|
def filename
|
|
"fizzy-user-data-export-#{id}.zip"
|
|
end
|
|
|
|
def populate_zip(zip)
|
|
exportable_cards.find_each do |card|
|
|
add_card_to_zip(zip, card)
|
|
end
|
|
end
|
|
|
|
def exportable_cards
|
|
user.accessible_cards.includes(
|
|
:board,
|
|
creator: :identity,
|
|
comments: { creator: :identity },
|
|
rich_text_description: { embeds_attachments: :blob }
|
|
)
|
|
end
|
|
|
|
def add_card_to_zip(zip, card)
|
|
zip.add_file("#{card.number}.json", card.export_json)
|
|
|
|
card.export_attachments.each do |attachment|
|
|
zip.add_file(attachment[:path], compress: false) do |f|
|
|
attachment[:blob].download { |chunk| f.write(chunk) }
|
|
end
|
|
rescue ActiveStorage::FileNotFoundError
|
|
# Skip attachments where the file is missing from storage
|
|
end
|
|
end
|
|
end
|