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}