35 lines
706 B
Ruby
35 lines
706 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module BoardRecentVisit
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
class_methods do
|
||
|
def visited!(user, board)
|
||
|
find_or_create_by(
|
||
|
"user" => user,
|
||
|
board_parent_relation => board.resource_parent,
|
||
|
board_relation => board
|
||
|
).tap do |visit|
|
||
|
visit.touch
|
||
|
end
|
||
|
rescue ActiveRecord::RecordNotUnique
|
||
|
retry
|
||
|
end
|
||
|
|
||
|
def latest(user, parent, count: nil)
|
||
|
visits = by_user_parent(user, parent).order(updated_at: :desc)
|
||
|
visits = visits.preload(board_relation)
|
||
|
|
||
|
visits.first(count)
|
||
|
end
|
||
|
|
||
|
def board_relation
|
||
|
:board
|
||
|
end
|
||
|
|
||
|
def board_parent_relation
|
||
|
raise NotImplementedError
|
||
|
end
|
||
|
end
|
||
|
end
|