From ba50d129b461a4ebd696b9d22683ce929878b379 Mon Sep 17 00:00:00 2001 From: Richard Towers Date: Thu, 21 Nov 2024 16:47:16 +0000 Subject: [PATCH] Add attachment_data_id to file attachments This needs to follow on from https://github.com/alphagov/publishing-api/pull/2994 As described there, the lack of attachment_data_id in the data for file asset attachments in content store makes it hard to request the attachments on the server side. Instead, we have to redirect users to the assets, which has led to ugly workarounds like CSV previews being rendered by frontend but served on assets.publishing.service.gov.uk. Adding attachment_data_id should allow the frontends to request attachments directly, using the API client: GdsApi.asset_manager.media(attachment_data_id, filename) This should make it much more convenient to preview assets, or use them for other rendering purposes (e.g. showing a CSV as a line graph). --- app/models/file_attachment.rb | 7 +++++++ test/unit/app/models/file_attachment_test.rb | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/app/models/file_attachment.rb b/app/models/file_attachment.rb index 0d4e434b2db..9cb7acef905 100644 --- a/app/models/file_attachment.rb +++ b/app/models/file_attachment.rb @@ -55,6 +55,7 @@ def publishing_api_details_for_format filename:, number_of_pages:, preview_url:, + attachment_data_id:, } end @@ -66,6 +67,12 @@ def alternative_format_contact_email nil end + def attachment_data_id + return unless csv? && attachable.is_a?(Edition) && attachment_data.all_asset_variants_uploaded? + + attachment_data.id + end + def preview_url return unless csv? && attachable.is_a?(Edition) && attachment_data.all_asset_variants_uploaded? diff --git a/test/unit/app/models/file_attachment_test.rb b/test/unit/app/models/file_attachment_test.rb index 7cca1fec314..6ce4443deb3 100644 --- a/test/unit/app/models/file_attachment_test.rb +++ b/test/unit/app/models/file_attachment_test.rb @@ -68,4 +68,9 @@ def assert_delegated(attachment, method) attachment = create(:csv_attachment, attachable: create(:edition)) assert_equal Plek.asset_root + "/media/#{attachment.attachment_data.id}/sample.csv/preview", attachment.publishing_api_details_for_format[:preview_url] end + + test "return media attachment_data_id if all_asset_variants_uploaded?" do + attachment = create(:csv_attachment, attachable: create(:edition)) + assert_equal attachment.attachment_data.id, attachment.publishing_api_details_for_format[:attachment_data_id] + end end