···
"github.com/bluesky-social/indigo/atproto/syntax"
10
-
"gorm.io/gorm/clause"
11
-
"tangled.sh/edavis.dev/monarch/models"
···
25
-
func NewHandlerService(store *gorm.DB) *HandlerService {
26
-
migrations := []any{
28
-
&models.ActorProfile{},
29
-
&models.ActorProfile_Label{},
30
-
&models.ActorStatus{},
32
-
&models.FeedGenerator{},
33
-
&models.FeedGenerator_Label{},
36
-
&models.FeedPost_Label{},
37
-
&models.FeedPost_Lang{},
38
-
&models.FeedPost_Tag{},
39
-
&models.FeedPostgate{},
40
-
&models.FeedPostgate_DetachedEmbeddingUri{},
41
-
&models.FeedPostgate_EmbeddingRule{},
42
-
&models.FeedRepost{},
43
-
&models.FeedThreadgate{},
44
-
&models.FeedThreadgate_AllowRule{},
45
-
&models.FeedThreadgate_HiddenReply{},
47
-
&models.GraphBlock{},
48
-
&models.GraphFollow{},
49
-
&models.GraphList{},
50
-
&models.GraphListblock{},
51
-
&models.GraphListitem{},
52
-
&models.GraphStarterpack{},
53
-
&models.GraphStarterpack_Feed{},
54
-
&models.GraphVerification{},
56
-
&models.LabelerService{},
57
-
&models.LabelerService_Label{},
58
-
&models.LabelerService_Policy{},
59
-
&models.LabelerService_ReasonType{},
60
-
&models.LabelerService_SubjectCollection{},
61
-
&models.LabelerService_SubjectType{},
23
+
type Record struct {
24
+
ID int `gorm:"primaryKey"`
28
+
Data []byte `gorm:"type:jsonb"`
64
-
&models.ActorDeclaration{},
66
-
for _, migration := range migrations {
67
-
store.AutoMigrate(migration)
31
+
func NewHandlerService(store *gorm.DB) *HandlerService {
32
+
store.AutoMigrate(&Record{})
75
-
type helper struct {
82
-
func NewHelper(db *gorm.DB, uri syntax.ATURI, record []byte, action Action) *helper {
83
-
return &helper{db, uri, record, action}
86
-
func upsertRecord[T any](maker func(syntax.ATURI, []byte) T, opts *helper) error {
87
-
obj := maker(opts.uri, opts.record)
88
-
switch opts.action {
90
-
if err := opts.db.Omit(clause.Associations).Create(obj).Error; err != nil {
91
-
return fmt.Errorf("error inserting %s record: %w", opts.uri.Collection(), err)
94
-
if err := opts.db.Save(obj).Error; err != nil {
95
-
return fmt.Errorf("error updating %s record: %w", opts.uri.Collection(), err)
39
+
var validCollections = map[syntax.NSID]bool{
40
+
syntax.NSID("app.bsky.actor.profile"): true,
41
+
syntax.NSID("app.bsky.feed.generator"): true,
42
+
syntax.NSID("app.bsky.labeler.service"): true,
func (hs *HandlerService) HandleUpsert(ctx context.Context, repo string, rev string, path string, rec *[]byte, cid *cid.Cid, action Action) error {
···
return fmt.Errorf("error parsing at-uri: %w", err)
107
-
opts := NewHelper(hs.store, uri, *rec, action)
109
-
switch uri.Collection() {
110
-
case syntax.NSID("app.bsky.actor.profile"):
111
-
return upsertRecord(models.NewActorProfile, opts)
113
-
case syntax.NSID("app.bsky.actor.status"):
114
-
return upsertRecord(models.NewActorStatus, opts)
116
-
case syntax.NSID("app.bsky.feed.generator"):
117
-
return upsertRecord(models.NewFeedGenerator, opts)
119
-
case syntax.NSID("app.bsky.feed.like"):
120
-
return upsertRecord(models.NewFeedLike, opts)
122
-
case syntax.NSID("app.bsky.feed.post"):
123
-
return upsertRecord(models.NewFeedPost, opts)
125
-
case syntax.NSID("app.bsky.feed.postgate"):
126
-
return upsertRecord(models.NewFeedPostgate, opts)
128
-
case syntax.NSID("app.bsky.feed.repost"):
129
-
return upsertRecord(models.NewFeedRepost, opts)
131
-
case syntax.NSID("app.bsky.feed.threadgate"):
132
-
return upsertRecord(models.NewFeedThreadgate, opts)
134
-
case syntax.NSID("app.bsky.graph.block"):
135
-
return upsertRecord(models.NewGraphBlock, opts)
51
+
ok := validCollections[uri.Collection()]
137
-
case syntax.NSID("app.bsky.graph.follow"):
138
-
return upsertRecord(models.NewGraphFollow, opts)
140
-
case syntax.NSID("app.bsky.graph.list"):
141
-
return upsertRecord(models.NewGraphList, opts)
143
-
case syntax.NSID("app.bsky.graph.listblock"):
144
-
return upsertRecord(models.NewGraphListblock, opts)
146
-
case syntax.NSID("app.bsky.graph.listitem"):
147
-
return upsertRecord(models.NewGraphListitem, opts)
149
-
case syntax.NSID("app.bsky.graph.starterpack"):
150
-
return upsertRecord(models.NewGraphStarterpack, opts)
152
-
case syntax.NSID("app.bsky.graph.verification"):
153
-
return upsertRecord(models.NewGraphVerification, opts)
155
-
case syntax.NSID("app.bsky.labeler.service"):
156
-
return upsertRecord(models.NewLabelerService, opts)
158
-
case syntax.NSID("chat.bsky.actor.declaration"):
159
-
return upsertRecord(models.NewActorDeclaration, opts)
58
+
if err := hs.store.Create(&Record{
60
+
Collection: string(uri.Collection()),
61
+
Key: string(uri.RecordKey()),
63
+
}).Error; err != nil {