Move Curated pool updater to Danbooru.
* Move the Curated pool updater from Reportbooru to Danbooru. * Change the process for selecting curated posts. Previously it was every post from the last week with at least three supervotes. This was flawed because it included both super-upvotes and super-downvotes. Now it's the top 100 posts from the last week, ordered from most super-upvoted to least.
This commit is contained in:
16
app/logical/curated_pool_updater.rb
Normal file
16
app/logical/curated_pool_updater.rb
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
module CuratedPoolUpdater
|
||||||
|
def self.curated_posts(date_range: (1.week.ago..Time.now), limit: 100)
|
||||||
|
posts = Post.where(created_at: date_range)
|
||||||
|
posts = posts.joins(:votes).where("post_votes.score": SuperVoter::MAGNITUDE)
|
||||||
|
posts = Post.where(id: posts.group(:id).order(Arel.sql("COUNT(*) DESC")).limit(limit))
|
||||||
|
posts
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.update_pool!(pool_id = Danbooru.config.curated_pool_id)
|
||||||
|
return unless pool_id.present?
|
||||||
|
|
||||||
|
CurrentUser.scoped(User.system, "127.0.0.1") do
|
||||||
|
Pool.find(pool_id).update!(post_ids: curated_posts.pluck(:id))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -21,6 +21,7 @@ module DanbooruMaintenance
|
|||||||
TagChangeRequestPruner.warn_all
|
TagChangeRequestPruner.warn_all
|
||||||
TagChangeRequestPruner.reject_all
|
TagChangeRequestPruner.reject_all
|
||||||
Ban.prune!
|
Ban.prune!
|
||||||
|
CuratedPoolUpdater.update_pool!
|
||||||
|
|
||||||
ActiveRecord::Base.connection.execute("vacuum analyze") unless Rails.env.test?
|
ActiveRecord::Base.connection.execute("vacuum analyze") unless Rails.env.test?
|
||||||
rescue Exception => exception
|
rescue Exception => exception
|
||||||
|
|||||||
@@ -41,6 +41,11 @@ module Danbooru
|
|||||||
ForumTopic.where(title: "Upload Feedback Thread").first
|
ForumTopic.where(title: "Upload Feedback Thread").first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The ID of the "Curated" pool. If present, this pool will be updated daily with curated posts.
|
||||||
|
def curated_pool_id
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
def source_code_url
|
def source_code_url
|
||||||
"https://github.com/r888888888/danbooru"
|
"https://github.com/r888888888/danbooru"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,13 +3,20 @@ require 'test_helper'
|
|||||||
class DanbooruMaintenanceTest < ActiveSupport::TestCase
|
class DanbooruMaintenanceTest < ActiveSupport::TestCase
|
||||||
context "daily maintenance" do
|
context "daily maintenance" do
|
||||||
setup do
|
setup do
|
||||||
FactoryBot.create(:admin_user) # for SuperVoter.init!
|
@admin = create(:admin_user) # for SuperVoter.init!
|
||||||
end
|
end
|
||||||
|
|
||||||
should "work" do
|
should "work" do
|
||||||
assert_nothing_raised { DanbooruMaintenance.daily }
|
assert_nothing_raised { DanbooruMaintenance.daily }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "update the curated pool" do
|
||||||
|
pool = as(@admin) { create(:pool, name: "curated") }
|
||||||
|
Danbooru.config.stubs(:curated_pool_id).returns(pool.id)
|
||||||
|
|
||||||
|
assert_nothing_raised { DanbooruMaintenance.daily }
|
||||||
|
end
|
||||||
|
|
||||||
should "prune expired posts" do
|
should "prune expired posts" do
|
||||||
@pending = FactoryBot.create(:post, is_pending: true, created_at: 4.days.ago)
|
@pending = FactoryBot.create(:post, is_pending: true, created_at: 4.days.ago)
|
||||||
@flagged = FactoryBot.create(:post, is_flagged: true, created_at: 4.days.ago)
|
@flagged = FactoryBot.create(:post, is_flagged: true, created_at: 4.days.ago)
|
||||||
|
|||||||
Reference in New Issue
Block a user