+7
cmd/monarch/handlers.go
+7
cmd/monarch/handlers.go
···
37
37
&models.FeedPostgate{},
38
38
&models.FeedPostgate_DetachedEmbeddingUri{},
39
39
&models.FeedPostgate_EmbeddingRule{},
40
+
&models.FeedRepost{},
40
41
41
42
&models.GraphBlock{},
42
43
&models.GraphList{},
···
104
105
postgate := models.NewFeedPostgate(uri, *rec)
105
106
if err := hs.store.Where(models.FeedPostgate{ID: string(uri)}).Assign(postgate).FirstOrCreate(&models.FeedPostgate{}).Error; err != nil {
106
107
return fmt.Errorf("error upserting feed postgate: %w", err)
108
+
}
109
+
110
+
case syntax.NSID("app.bsky.feed.repost"):
111
+
repost := models.NewFeedRepost(uri, *rec)
112
+
if err := hs.store.Where(models.FeedRepost{ID: string(uri)}).Assign(repost).FirstOrCreate(repost).Error; err != nil {
113
+
return fmt.Errorf("error upserting feed repost: %w", err)
107
114
}
108
115
109
116
case syntax.NSID("app.bsky.graph.block"):
+50
models/feed_repost.go
+50
models/feed_repost.go
···
1
+
package models
2
+
3
+
import (
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
+
12
+
type FeedRepost 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
+
23
+
func NewFeedRepost(uri syntax.ATURI, rec []byte) *FeedRepost {
24
+
var out appbsky.FeedRepost
25
+
if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil {
26
+
slog.Error("could not unmarshal feed repost CBOR", "err", err)
27
+
return nil
28
+
}
29
+
30
+
repost := FeedRepost{
31
+
ID: string(uri),
32
+
CreatedAt: out.CreatedAt,
33
+
}
34
+
35
+
if out.Subject != nil {
36
+
repost.Subject = &StrongRef{
37
+
Uri: out.Subject.Uri,
38
+
Cid: out.Subject.Cid,
39
+
}
40
+
}
41
+
42
+
if out.Via != nil {
43
+
repost.Via = &StrongRef{
44
+
Uri: out.Via.Uri,
45
+
Cid: out.Via.Cid,
46
+
}
47
+
}
48
+
49
+
return &repost
50
+
}