65 lines
1.3 KiB
Ruby
65 lines
1.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class APICategory
|
||
|
attr_reader :name, :db, :sfw
|
||
|
|
||
|
SOURCES = [
|
||
|
%w[e621.net E621],
|
||
|
%w[furaffinity.net FurAffinity],
|
||
|
%w[inkbunny.net InkBunny],
|
||
|
%w[deviantart.com DeviantArt],
|
||
|
%w[twitter.com Twitter],
|
||
|
].freeze
|
||
|
|
||
|
def initialize(name, db, sfw)
|
||
|
@name = name
|
||
|
@db = db
|
||
|
@sfw = sfw
|
||
|
end
|
||
|
|
||
|
def count
|
||
|
APIImage.cached_count(db)
|
||
|
end
|
||
|
|
||
|
def real_count
|
||
|
APIImage.where(category: db).count
|
||
|
end
|
||
|
|
||
|
def unsourced_count
|
||
|
APIImage.where(category: db, sources: []).count
|
||
|
end
|
||
|
|
||
|
def sources
|
||
|
r = APIImage.joins("CROSS JOIN unnest(sources) AS source").where(category: db).distinct
|
||
|
other = r
|
||
|
list = []
|
||
|
|
||
|
APICategory::SOURCES.each do |value, name|
|
||
|
count = r.where("source ILIKE ?", "%#{value}%").count
|
||
|
list << { name: name, count: count }
|
||
|
other = other.where("source NOT ILIKE ?", "%#{value}%")
|
||
|
end
|
||
|
list << { name: "Unsourced", count: unsourced_count }
|
||
|
# noinspection RubyMismatchedArgumentType
|
||
|
list << { name: "Other", count: other.count }
|
||
|
list
|
||
|
end
|
||
|
|
||
|
def created_at
|
||
|
APIImage.where(category: db).minimum(:created_at)
|
||
|
end
|
||
|
|
||
|
def updated_at
|
||
|
APIImage.where(category: db).maximum(:updated_at)
|
||
|
end
|
||
|
|
||
|
def as_json(*)
|
||
|
{
|
||
|
name: name,
|
||
|
db: db,
|
||
|
sfw: sfw,
|
||
|
count: count,
|
||
|
}
|
||
|
end
|
||
|
end
|