Don't forget to lycansubscribe
1require 'active_record'
2require 'time'
3
4require_relative '../at_uri'
5require_relative 'post'
6require_relative 'searchable'
7require_relative 'user'
8
9class Quote < ActiveRecord::Base
10 include Searchable
11 include Importable
12
13 validates_presence_of :time, :rkey
14 validates_length_of :rkey, is: 13
15 validates :quote_text, length: { minimum: 0, maximum: 1000, allow_nil: false }
16
17 belongs_to :user, foreign_key: 'actor_id'
18 belongs_to :post, optional: true
19
20 def self.new_from_record(uri, record)
21 return nil unless record['embed']
22
23 quoted_post_uri = case record['embed']['$type']
24 when 'app.bsky.embed.record'
25 record['embed']['record']['uri']
26 when 'app.bsky.embed.recordWithMedia'
27 record['embed']['record']['record']['uri']
28 else
29 return nil
30 end
31
32 self.new(
33 rkey: AT_URI(uri).rkey,
34 time: Time.parse(record['createdAt']),
35 post_uri: quoted_post_uri,
36 quote_text: record['text']
37 )
38 end
39end