···
100
-
// handles both creates and updates
func (hs *HandlerService) HandleUpsert(ctx context.Context, repo string, rev string, path string, rec *[]byte, cid *cid.Cid, action Action) error {
uri, err := syntax.ParseATURI(fmt.Sprintf("at://%s/%s", repo, path))
···
switch uri.Collection() {
case syntax.NSID("app.bsky.actor.profile"):
111
-
profile := models.NewActorProfile(uri, *rec)
112
-
if err := hs.store.Where(models.ActorProfile{ID: string(uri)}).Assign(profile).FirstOrCreate(&models.ActorProfile{}).Error; err != nil {
113
-
return fmt.Errorf("error upserting actor profile: %w", err)
110
+
return upsertRecord(models.NewActorProfile, opts)
case syntax.NSID("app.bsky.actor.status"):
117
-
status := models.NewActorStatus(uri, *rec)
118
-
if err := hs.store.Where(models.ActorStatus{ID: string(uri)}).Assign(status).FirstOrCreate(&models.ActorStatus{}).Error; err != nil {
119
-
return fmt.Errorf("error upserting actor status: %w", err)
113
+
return upsertRecord(models.NewActorStatus, opts)
case syntax.NSID("app.bsky.feed.generator"):
123
-
feedgen := models.NewFeedGenerator(uri, *rec)
124
-
if err := hs.store.Where(models.FeedGenerator{ID: string(uri)}).Assign(feedgen).FirstOrCreate(&models.FeedGenerator{}).Error; err != nil {
125
-
return fmt.Errorf("error upserting feed generator: %w", err)
116
+
return upsertRecord(models.NewFeedGenerator, opts)
case syntax.NSID("app.bsky.feed.like"):
129
-
like := models.NewFeedLike(uri, *rec)
130
-
if err := hs.store.Where(models.FeedLike{ID: string(uri)}).Assign(like).FirstOrCreate(&models.FeedLike{}).Error; err != nil {
131
-
return fmt.Errorf("error upserting feed like: %w", err)
119
+
return upsertRecord(models.NewFeedLike, opts)
case syntax.NSID("app.bsky.feed.post"):
135
-
post := models.NewFeedPost(uri, *rec)
136
-
if err := hs.store.Where(models.FeedPost{ID: string(uri)}).Assign(post).FirstOrCreate(&models.FeedPost{}).Error; err != nil {
137
-
return fmt.Errorf("error upserting feed like: %w", err)
122
+
return upsertRecord(models.NewFeedPost, opts)
case syntax.NSID("app.bsky.feed.postgate"):
141
-
postgate := models.NewFeedPostgate(uri, *rec)
142
-
if err := hs.store.Where(models.FeedPostgate{ID: string(uri)}).Assign(postgate).FirstOrCreate(&models.FeedPostgate{}).Error; err != nil {
143
-
return fmt.Errorf("error upserting feed postgate: %w", err)
125
+
return upsertRecord(models.NewFeedPostgate, opts)
case syntax.NSID("app.bsky.feed.repost"):
return upsertRecord(models.NewFeedRepost, opts)
case syntax.NSID("app.bsky.feed.threadgate"):
150
-
threadgate := models.NewFeedThreadgate(uri, *rec)
151
-
if err := hs.store.Where(models.FeedThreadgate{ID: string(uri)}).Assign(threadgate).FirstOrCreate(&models.FeedThreadgate{}).Error; err != nil {
152
-
return fmt.Errorf("error upserting feed threadgate: %w", err)
131
+
return upsertRecord(models.NewFeedThreadgate, opts)
case syntax.NSID("app.bsky.graph.block"):
156
-
block := models.NewGraphBlock(uri, *rec)
157
-
if err := hs.store.Where(models.GraphBlock{ID: string(uri)}).Assign(block).FirstOrCreate(&models.GraphBlock{}).Error; err != nil {
158
-
return fmt.Errorf("error upserting graph block: %w", err)
134
+
return upsertRecord(models.NewGraphBlock, opts)
case syntax.NSID("app.bsky.graph.follow"):
162
-
follow := models.NewGraphFollow(uri, *rec)
163
-
if err := hs.store.Where(models.GraphFollow{ID: string(uri)}).Assign(follow).FirstOrCreate(&models.GraphFollow{}).Error; err != nil {
164
-
return fmt.Errorf("error upserting graph follow: %w", err)
137
+
return upsertRecord(models.NewGraphFollow, opts)
case syntax.NSID("app.bsky.graph.list"):
168
-
list := models.NewGraphList(uri, *rec)
169
-
if err := hs.store.Where(models.GraphList{ID: string(uri)}).Assign(list).FirstOrCreate(&models.GraphList{}).Error; err != nil {
170
-
return fmt.Errorf("error upserting graph list: %w", err)
140
+
return upsertRecord(models.NewGraphList, opts)
case syntax.NSID("app.bsky.graph.listblock"):
174
-
listblock := models.NewGraphListblock(uri, *rec)
175
-
if err := hs.store.Where(models.GraphListblock{ID: string(uri)}).Assign(listblock).FirstOrCreate(&models.GraphListblock{}).Error; err != nil {
176
-
return fmt.Errorf("error upserting graph listblock: %w", err)
143
+
return upsertRecord(models.NewGraphListblock, opts)
case syntax.NSID("app.bsky.graph.listitem"):
180
-
listitem := models.NewGraphListitem(uri, *rec)
181
-
if err := hs.store.Where(models.GraphListitem{ID: string(uri)}).Assign(listitem).FirstOrCreate(&models.GraphListitem{}).Error; err != nil {
182
-
return fmt.Errorf("error upserting graph listitem: %w", err)
146
+
return upsertRecord(models.NewGraphListitem, opts)
case syntax.NSID("app.bsky.graph.starterpack"):
186
-
pack := models.NewGraphStarterpack(uri, *rec)
187
-
if err := hs.store.Where(models.GraphStarterpack{ID: string(uri)}).Assign(pack).FirstOrCreate(&models.GraphStarterpack{}).Error; err != nil {
188
-
return fmt.Errorf("error upserting graph starterpack: %w", err)
149
+
return upsertRecord(models.NewGraphStarterpack, opts)
case syntax.NSID("app.bsky.graph.verification"):
192
-
verification := models.NewGraphVerification(uri, *rec)
193
-
if err := hs.store.Where(models.GraphVerification{ID: string(uri)}).Assign(verification).FirstOrCreate(&models.GraphVerification{}).Error; err != nil {
194
-
return fmt.Errorf("error upserting graph verification: %w", err)
152
+
return upsertRecord(models.NewGraphVerification, opts)
case syntax.NSID("app.bsky.labeler.service"):
198
-
labeler := models.NewLabelerService(uri, *rec)
199
-
if err := hs.store.Where(models.LabelerService{ID: string(uri)}).Assign(labeler).FirstOrCreate(&models.LabelerService{}).Error; err != nil {
200
-
return fmt.Errorf("error upserting labeler service: %w", err)
155
+
return upsertRecord(models.NewLabelerService, opts)
case syntax.NSID("chat.bsky.actor.declaration"):
204
-
declaration := models.NewActorDeclaration(uri, *rec)
205
-
if err := hs.store.Where(models.ActorDeclaration{ID: string(uri)}).Assign(declaration).FirstOrCreate(&models.ActorDeclaration{}).Error; err != nil {
206
-
return fmt.Errorf("error upserting chat actor declaration: %w", err)
158
+
return upsertRecord(models.NewActorDeclaration, opts)