From 9a23970ab1992053b5d1901f305ece721b0b7bd5 Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 12 Feb 2022 13:12:33 -0600 Subject: [PATCH] uploads: fix media_asset_count. --- app/models/upload.rb | 2 +- script/fixes/101_fix_media_asset_count.rb | 27 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100755 script/fixes/101_fix_media_asset_count.rb diff --git a/app/models/upload.rb b/app/models/upload.rb index 1a8b747c7..30db046a1 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -100,7 +100,7 @@ class Upload < ApplicationRecord end media_asset = MediaAsset.upload!(media_file) - update!(media_assets: [media_asset], status: "completed") + update!(media_assets: [media_asset], status: "completed", media_asset_count: 1) rescue Exception => e update!(status: "error", error: e.message) end diff --git a/script/fixes/101_fix_media_asset_count.rb b/script/fixes/101_fix_media_asset_count.rb new file mode 100755 index 000000000..82183d5be --- /dev/null +++ b/script/fixes/101_fix_media_asset_count.rb @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby + +require_relative "base" + +with_confirmation do + # Fix uploads that have a non-zero media_asset_count but no media assets. + records = Upload.where("media_asset_count != 0").where.not(id: UploadMediaAsset.select(:upload_id).distinct) + puts "Fixing #{records.size} records" + records.update_all(media_asset_count: 0) +end + +with_confirmation do + # Fix uploads that have a media_asset_count inconsistent with the upload_media_assets table. + records = Upload.find_by_sql(<<~SQL.squish) + UPDATE uploads + SET media_asset_count = true_count + FROM ( + SELECT upload_id, COUNT(*) AS true_count + FROM upload_media_assets + GROUP BY upload_id + ) true_counts + WHERE uploads.id = upload_id AND uploads.media_asset_count != true_count + RETURNING uploads.* + SQL + + puts "Fixing #{records.size} records" +end