Don't forget to lycansubscribe

continue previously started import if there was any

+9
app/importer.rb
··· 1 1 require 'didkit' 2 2 require 'minisky' 3 3 4 + require_relative 'models/import' 4 5 require_relative 'models/like' 5 6 require_relative 'models/post' 6 7 require_relative 'models/user' ··· 22 23 end 23 24 24 25 def import_likes(time_limit = nil) 26 + import = @user.import || @user.create_import! 27 + 25 28 params = { repo: @did, collection: 'app.bsky.feed.like', limit: 100 } 29 + params[:cursor] = import.cursor if import.cursor 30 + 26 31 count = 0 27 32 28 33 loop do ··· 37 42 process_likes(records) 38 43 params[:cursor] = cursor 39 44 45 + import.update!(cursor: cursor) 46 + 40 47 break if !cursor 41 48 break if time_limit && records.any? { |x| Time.parse(x['value']['createdAt']) < time_limit } 42 49 end 50 + 51 + import.update!(cursor: nil) 43 52 end 44 53 45 54 def process_likes(likes)
+7
app/models/import.rb
··· 1 + require 'active_record' 2 + 3 + require_relative 'user' 4 + 5 + class Import < ActiveRecord::Base 6 + belongs_to :user 7 + end
+2
app/models/user.rb
··· 1 1 require 'active_record' 2 2 3 + require_relative 'import' 3 4 require_relative 'like' 4 5 require_relative 'post' 5 6 ··· 9 10 10 11 has_many :posts 11 12 has_many :likes, foreign_key: 'actor_id' 13 + has_one :import 12 14 end
+10
db/migrate/20250831202829_create_imports.rb
··· 1 + class CreateImports < ActiveRecord::Migration[7.2] 2 + def change 3 + create_table :imports do |t| 4 + t.integer "user_id", null: false 5 + t.string "cursor" 6 + end 7 + 8 + add_index :imports, :user_id, unique: true 9 + end 10 + end
+7 -1
db/schema.rb
··· 10 10 # 11 11 # It's strongly recommended that you check this file into your version control system. 12 12 13 - ActiveRecord::Schema[7.2].define(version: 2025_08_30_210139) do 13 + ActiveRecord::Schema[7.2].define(version: 2025_08_31_202829) do 14 14 # These are extensions that must be enabled in order to support this database 15 15 enable_extension "plpgsql" 16 + 17 + create_table "imports", force: :cascade do |t| 18 + t.integer "user_id", null: false 19 + t.string "cursor" 20 + t.index ["user_id"], name: "index_imports_on_user_id", unique: true 21 + end 16 22 17 23 create_table "likes", force: :cascade do |t| 18 24 t.integer "actor_id", null: false