an app.bsky.* indexer
1package models
2
3import (
4 "bytes"
5 "log/slog"
6 "time"
7
8 appbsky "github.com/bluesky-social/indigo/api/bsky"
9 "github.com/bluesky-social/indigo/atproto/syntax"
10)
11
12type FeedLike struct {
13 ID string `gorm:"primaryKey"`
14
15 CreatedAt string
16 Subject *StrongRef `gorm:"embedded;embeddedPrefix:subject_"`
17 Via *StrongRef `gorm:"embedded;embeddedPrefix:via_"`
18
19 AutoCreatedAt time.Time `gorm:"autoCreateTime"`
20 AutoUpdatedAt time.Time `gorm:"autoUpdateTime"`
21}
22
23func NewFeedLike(uri syntax.ATURI, rec []byte) *FeedLike {
24 var out appbsky.FeedLike
25 if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil {
26 slog.Error("could not unmarshal feed like CBOR", "err", err)
27 return nil
28 }
29
30 like := FeedLike{
31 ID: string(uri),
32 CreatedAt: out.CreatedAt,
33 }
34
35 if out.Subject != nil {
36 like.Subject = &StrongRef{
37 Uri: out.Subject.Uri,
38 Cid: out.Subject.Cid,
39 }
40 }
41
42 if out.Via != nil {
43 like.Via = &StrongRef{
44 Uri: out.Via.Uri,
45 Cid: out.Via.Cid,
46 }
47 }
48
49 return &like
50}