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 FeedRepost struct {
13 ID string `gorm:"primaryKey"`
14
15 CreatedAt string
16
17 Subject *StrongRef `gorm:"embedded;embeddedPrefix:subject_"`
18 Via *StrongRef `gorm:"embedded;embeddedPrefix:via_"`
19
20 // SubjectUri string
21 // ViaUri string
22
23 AutoCreatedAt time.Time `gorm:"autoCreateTime"`
24 AutoUpdatedAt time.Time `gorm:"autoUpdateTime"`
25}
26
27func NewFeedRepost(uri syntax.ATURI, rec []byte) *FeedRepost {
28 var out appbsky.FeedRepost
29 if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil {
30 slog.Error("could not unmarshal feed repost CBOR", "err", err)
31 return nil
32 }
33
34 slog.Info("repost debug", "out", out)
35
36 repost := FeedRepost{
37 ID: string(uri),
38 CreatedAt: out.CreatedAt,
39 }
40
41 if out.Subject != nil {
42 slog.Info("out.Subject is not nil")
43 repost.Subject = &StrongRef{
44 Uri: out.Subject.Uri,
45 Cid: out.Subject.Cid,
46 }
47 // repost.SubjectUri = out.Subject.Uri
48 } else {
49 slog.Info("out.Subject is nil")
50 }
51
52 if out.Via != nil {
53 slog.Info("out.Via is not nil")
54 repost.Via = &StrongRef{
55 Uri: out.Via.Uri,
56 Cid: out.Via.Cid,
57 }
58 // repost.ViaUri = out.Via.Uri
59 } else {
60 slog.Info("out.Via is nil")
61 }
62
63 slog.Info("final repost", "repost", repost)
64
65 return &repost
66}