1# frozen_string_literal: true
2
3module BoardRecentVisit
4  extend ActiveSupport::Concern
5
6  class_methods do
7    def visited!(user, board)
8      find_or_create_by(
9        "user" => user,
10        board_parent_relation => board.resource_parent,
11        board_relation => board
12      ).tap do |visit|
13        visit.touch
14      end
15    rescue ActiveRecord::RecordNotUnique
16      retry
17    end
18
19    def latest(user, parent, count: nil)
20      visits = by_user_parent(user, parent).order(updated_at: :desc)
21      visits = visits.preload(board_relation)
22
23      visits.first(count)
24    end
25
26    def board_relation
27      :board
28    end
29
30    def board_parent_relation
31      raise NotImplementedError
32    end
33  end
34end
35