From 0500896fd0d2106d81a9cd2e4a0505319e8d995e Mon Sep 17 00:00:00 2001 From: Donovan Daniels Date: Mon, 12 Aug 2024 04:39:53 -0500 Subject: [PATCH] [AvoidPosting] Add caching, order search, and tweak modactions (#713) --- app/controllers/avoid_postings_controller.rb | 2 +- app/decorators/mod_action_decorator.rb | 10 ++++----- app/helpers/avoid_posting_helper.rb | 22 +++++++++++--------- app/models/avoid_posting.rb | 19 ++++++++++++++++- app/views/avoid_postings/_search.html.erb | 1 + 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/app/controllers/avoid_postings_controller.rb b/app/controllers/avoid_postings_controller.rb index 9606c3d6f..969f6731e 100644 --- a/app/controllers/avoid_postings_controller.rb +++ b/app/controllers/avoid_postings_controller.rb @@ -94,7 +94,7 @@ class AvoidPostingsController < ApplicationController end def search_params - permitted_params = %i[creator_name creator_id any_name_matches artist_id artist_name any_other_name_matches group_name details is_active] + permitted_params = %i[creator_name creator_id any_name_matches artist_id artist_name any_other_name_matches group_name details is_active order] permitted_params += %i[staff_notes] if CurrentUser.is_staff? permitted_params += %i[ip_addr] if CurrentUser.is_admin? permit_search_params permitted_params diff --git a/app/decorators/mod_action_decorator.rb b/app/decorators/mod_action_decorator.rb index beda3b46a..45d12b184 100644 --- a/app/decorators/mod_action_decorator.rb +++ b/app/decorators/mod_action_decorator.rb @@ -67,15 +67,15 @@ class ModActionDecorator < ApplicationDecorator ### Avoid Posting ### when "avoid_posting_create" - "Created avoid posting entry for artist \"#{vals['artist_name']}\":/artists/show_or_new?name=#{vals['artist_name']}" + "Created \"avoid posting ##{vals['id']}\":/avoid_postings/#{vals['id']} for [[#{vals['artist_name']}]]" when "avoid_posting_update" - "Updated avoid posting entry for artist \"#{vals['artist_name']}\":/artists/show_or_new?name=#{vals['artist_name']}" + "Updated \"avoid posting ##{vals['id']}\":/avoid_postings/#{vals['id']} for [[#{vals['artist_name']}]]" when "avoid_posting_destroy" - "Destroyed avoid posting entry for artist \"#{vals['artist_name']}\":/artists/show_or_new?name=#{vals['artist_name']}" + "Destroyed \"avoid posting ##{vals['id']}\":/avoid_postings/#{vals['id']} for [[#{vals['artist_name']}]]" when "avoid_posting_delete" - "Deleted avoid posting entry for artist \"#{vals['artist_name']}\":/artists/show_or_new?name=#{vals['artist_name']}" + "Deleted \"avoid posting ##{vals['id']}\":/avoid_postings/#{vals['id']} for [[#{vals['artist_name']}]]" when "avoid_posting_undelete" - "Undeleted avoid posting entry for artist \"#{vals['artist_name']}\":/artists/show_or_new?name=#{vals['artist_name']}" + "Undeleted \"avoid posting ##{vals['id']}\":/avoid_postings/#{vals['id']} for [[#{vals['artist_name']}]]" ### User ### diff --git a/app/helpers/avoid_posting_helper.rb b/app/helpers/avoid_posting_helper.rb index 2a437e1a4..0328e7c80 100644 --- a/app/helpers/avoid_posting_helper.rb +++ b/app/helpers/avoid_posting_helper.rb @@ -2,20 +2,22 @@ module AvoidPostingHelper def format_avoid_posting_list - avoid_postings = AvoidPosting.active.joins(:artist).order("artists.name ASC").group_by(&:header) - text = "" - avoid_postings.each do |header, entries| - text += "h2. #{header} [##{anchor(header)}]\n" - entries.each do |dnp| - text += "* #{dnp.all_names}" - if dnp.pretty_details.present? - text += " - #{dnp.pretty_details}" + Cache.fetch("avoid_posting_list", expires_in: 1.day) do + avoid_postings = AvoidPosting.active.joins(:artist).order("artists.name ASC").group_by(&:header) + text = "" + avoid_postings.each do |header, entries| + text += "h2. #{header} [##{anchor(header)}]\n" + entries.each do |dnp| + text += "* #{dnp.all_names}" + if dnp.pretty_details.present? + text += " - #{dnp.pretty_details}" + end + text += "\n" end text += "\n" end - text += "\n" + format_text(text) end - format_text(text) end private diff --git a/app/models/avoid_posting.rb b/app/models/avoid_posting.rb index 9ab257f68..59599b4f1 100644 --- a/app/models/avoid_posting.rb +++ b/app/models/avoid_posting.rb @@ -13,6 +13,7 @@ class AvoidPosting < ApplicationRecord after_destroy :log_destroy validates_associated :artist accepts_nested_attributes_for :artist + after_commit :invalidate_cache scope :active, -> { where(is_active: true) } scope :deleted, -> { where(is_active: false) } @@ -96,7 +97,19 @@ class AvoidPosting < ApplicationRecord q = q.attribute_matches(:staff_notes, params[:staff_notes]) q = q.where_user(:creator_id, :creator, params) q = q.where("creator_ip_addr <<= ?", params[:ip_addr]) if params[:ip_addr].present? - q.apply_basic_order(params) + case params[:order] + when "artist_name", "artist_name_asc" + q = q.joins(:artist).order("artists.name ASC") + when "artist_name_desc" + q = q.joins(:artist).order("artists.name DESC") + when "created_at" + q = q.order("created_at DESC") + when "updated_at" + q = q.order("updated_at DESC") + else + q = q.apply_basic_order(params) + end + q end end @@ -122,6 +135,10 @@ class AvoidPosting < ApplicationRecord "" end + def invalidate_cache + Cache.delete("avoid_posting_list") + end + include LogMethods include ApiMethods include ArtistMethods diff --git a/app/views/avoid_postings/_search.html.erb b/app/views/avoid_postings/_search.html.erb index dfdc77efb..20a261996 100644 --- a/app/views/avoid_postings/_search.html.erb +++ b/app/views/avoid_postings/_search.html.erb @@ -13,4 +13,5 @@ <%= f.input :staff_notes %> <% end %> <%= f.input :is_active, label: "Active?", collection: [%w[Yes true], %w[No false], %w[Any any]] %> + <%= f.input :order, collection: [["Artist Name", "artist_name"], %w[Created created_at], %w[Updated updated_at]], include_blank: true %> <% end %>