From 5bb64596cb205424ecc0b06f814d6a6e93a83d14 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 12 Feb 2022 16:48:34 -0600 Subject: [PATCH] uploads: include media assets in API response. Include media assets in /uploads.json and /uploads/:id.json API responses, like this: { "id": 4983629, "source": "https://www.pixiv.net/en/artworks/96198438", "uploader_id": 52664, "status": "completed", "created_at": "2022-02-12T16:26:04.680-06:00", "updated_at": "2022-02-12T16:26:08.071-06:00", "referer_url": "", "error": null, "media_asset_count": 1, "upload_media_assets": [ { "id": 9370, "created_at": "2022-02-12T16:26:08.068-06:00", "updated_at": "2022-02-12T16:26:08.068-06:00", "upload_id": 4983629, "media_asset_id": 5206552, "status": "pending", "source_url": "https://i.pximg.net/img-original/img/2022/02/13/01/20/19/96198438_p0.jpg", "error": null, "page_url": "https://www.pixiv.net/artworks/96198438", "media_asset": { "id": 5206552, "created_at": "2022-02-12T16:26:07.980-06:00", "updated_at": "2022-02-12T16:26:08.061-06:00", "md5": "90a85a5fae5f0e86bdb2501229af05b7", "file_ext": "jpg", "file_size": 1055775, "image_width": 1052, "image_height": 1545, "duration": null, "status": "active" } } ] } This is needed so you can check for upload errors in the API, since in a multi-file upload, each asset can have a separate error message. This is a stopgap solution until something like /uploads.json?include=upload_media_assets.media_asset works. --- app/controllers/uploads_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb index 774b5528e..3f6fa7507 100644 --- a/app/controllers/uploads_controller.rb +++ b/app/controllers/uploads_controller.rb @@ -34,8 +34,8 @@ class UploadsController < ApplicationController case @mode when "table" @uploads = authorize Upload.visible(CurrentUser.user).paginated_search(params, count_pages: true) - @uploads = @uploads.includes(:uploader, media_assets: [:post]) if request.format.html? - respond_with(@uploads) + @uploads = @uploads.includes(:uploader, media_assets: :post, upload_media_assets: { media_asset: :post }) if request.format.html? + respond_with(@uploads, include: { upload_media_assets: { include: :media_asset }}) when "gallery" @media_assets = authorize MediaAsset.active.visible(CurrentUser.user).includes(:post, uploads: [:uploader]).where(uploads: { uploader: CurrentUser.user }).paginated_search(params, count_pages: true).reorder("uploads.id DESC") respond_with(@media_assets) @@ -57,7 +57,7 @@ class UploadsController < ApplicationController flash[:notice] = "Duplicate of post ##{@upload.media_assets.first.post.id}" redirect_to @upload.media_assets.first.post else - respond_with(@upload) + respond_with(@upload, include: { upload_media_assets: { include: :media_asset }}) end end end