123 lines
5.5 KiB
Ruby
123 lines
5.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class UserAction < ApplicationRecord
|
|
belongs_to :model, polymorphic: true
|
|
belongs_to :user
|
|
|
|
attribute :model_type, :string
|
|
attribute :model_id, :integer
|
|
attribute :user_id, :integer
|
|
attribute :event_type, :string
|
|
attribute :event_at, :time
|
|
|
|
def self.model_types
|
|
%w[ArtistVersion ArtistCommentaryVersion Ban BulkUpdateRequest Comment
|
|
CommentVote Dmail FavoriteGroup ForumPost ForumPostVote ForumTopic
|
|
ModAction ModerationReport NoteVersion Post PostAppeal PostApproval
|
|
PostDisapproval PostFlag PostReplacement PostVote SavedSearch TagAlias
|
|
TagImplication TagVersion Upload User UserEvent UserFeedback UserUpgrade
|
|
UserNameChangeRequest WikiPageVersion]
|
|
end
|
|
|
|
def self.for_user(user)
|
|
sql = <<~SQL.squish
|
|
(#{ArtistVersion.visible(user).select("'ArtistVersion'::character varying AS model_type, id AS model_id, updater_id AS user_id, 'create'::character varying AS event_type, created_at AS event_at").to_sql})
|
|
UNION ALL
|
|
(#{ArtistCommentaryVersion.visible(user).select("'ArtistCommentaryVersion', id, updater_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{Ban.visible(user).select("'Ban', id, user_id, 'subject', created_at").to_sql})
|
|
UNION ALL
|
|
(#{BulkUpdateRequest.visible(user).select("'BulkUpdateRequest', id, user_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{Comment.visible(user).select("'Comment', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{CommentVote.visible(user).select("'CommentVote', id, user_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{Dmail.visible(user).sent.select("'Dmail', id, from_id, 'create', created_at").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{FavoriteGroup.visible(user).select("'FavoriteGroup', id, creator_id, 'create', created_at").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{ForumPost.visible(user).select("'ForumPost', id, creator_id, 'create', created_at").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{ForumPostVote.visible(user).select("'ForumPostVote', id, creator_id, 'create', created_at").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{ForumTopic.visible(user).select("'ForumTopic', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{ModAction.visible(user).select("'ModAction', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{ModerationReport.visible(user).select("'ModerationReport', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{NoteVersion.visible(user).select("'NoteVersion', id, updater_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{Post.visible(user).select("'Post', id, uploader_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{PostAppeal.visible(user).select("'PostAppeal', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{PostApproval.visible(user).select("'PostApproval', id, user_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{PostDisapproval.visible(user).select("'PostDisapproval', id, user_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{PostFlag.visible(user).select("'PostFlag', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{PostReplacement.visible(user).select("'PostReplacement', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{PostVote.visible(user).select("'PostVote', id, user_id, 'create', created_at").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{SavedSearch.visible(user).select("'SavedSearch', id, user_id, 'create', created_at").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{TagAlias.visible(user).select("'TagAlias', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{TagImplication.visible(user).select("'TagImplication', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{TagVersion.visible(user).select("'TagVersion', id, updater_id, 'create', created_at").where("updater_id IS NOT NULL").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{Upload.visible(user).select("'Upload', id, uploader_id, 'create', created_at").order(created_at: :desc).to_sql})
|
|
UNION ALL
|
|
(#{User.visible(user).select("'User', id, id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{UserEvent.visible(user).select("'UserEvent', id, user_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{UserFeedback.visible(user).select("'UserFeedback', id, creator_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{UserFeedback.visible(user).select("'UserFeedback', id, user_id, 'subject', created_at").to_sql})
|
|
UNION ALL (
|
|
(#{UserUpgrade.visible(user).select("'UserUpgrade', id, purchaser_id, 'create', created_at").where(status: [:complete, :refunded]).order(created_at: :desc).to_sql})
|
|
) UNION ALL
|
|
(#{UserNameChangeRequest.visible(user).select("'UserNameChangeRequest', id, user_id, 'create', created_at").to_sql})
|
|
UNION ALL
|
|
(#{WikiPageVersion.visible(user).select("'WikiPageVersion', id, updater_id, 'create', created_at").to_sql})
|
|
SQL
|
|
|
|
from("(#{sql}) user_actions")
|
|
end
|
|
|
|
def self.visible(user)
|
|
all
|
|
end
|
|
|
|
def self.search(params, current_user)
|
|
q = search_attributes(params, [:event_type, :user, :model], current_user: current_user)
|
|
|
|
case params[:order]
|
|
when "event_at_asc"
|
|
q = q.order(event_at: :asc, model_id: :asc)
|
|
else
|
|
q = q.apply_default_order(params)
|
|
end
|
|
|
|
q
|
|
end
|
|
|
|
def self.default_order
|
|
order(event_at: :desc, model_id: :desc)
|
|
end
|
|
|
|
def self.available_includes
|
|
[:user, :model]
|
|
end
|
|
|
|
def readonly?
|
|
true
|
|
end
|
|
end
|