Don't forget to lycansubscribe
1require 'active_record'
2
3require_relative 'user'
4
5class Import < ActiveRecord::Base
6 belongs_to :user
7
8 validates_inclusion_of :collection, in: %w(likes reposts posts)
9 validates_uniqueness_of :collection, scope: :user_id
10
11 scope :unfinished, -> { where('(started_from IS NOT NULL) OR (last_completed IS NULL)') }
12
13 IMPORT_END = Time.at(0)
14
15 def imported_until
16 return nil if cursor.nil? && last_completed.nil?
17
18 groups = case collection
19 when 'likes'
20 [:likes]
21 when 'reposts'
22 [:reposts]
23 when 'posts'
24 [:pins, :quotes]
25 end
26
27 newest_queued_items = groups.map { |g| user.send(g).where(queue: :import).order(:time).last }
28 newest_queued = newest_queued_items.compact.sort_by(&:time).last
29
30 if newest_queued
31 newest_queued.time
32 elsif fetched_until
33 fetched_until
34 else
35 IMPORT_END
36 end
37 end
38end