an app.bsky.* indexer

switch to upsertRecord

Changed files
+16 -65
cmd
monarch
+16 -65
cmd/monarch/handlers.go
···
return nil
}
-
// 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))
if err != nil {
···
switch uri.Collection() {
case syntax.NSID("app.bsky.actor.profile"):
-
profile := models.NewActorProfile(uri, *rec)
-
if err := hs.store.Where(models.ActorProfile{ID: string(uri)}).Assign(profile).FirstOrCreate(&models.ActorProfile{}).Error; err != nil {
-
return fmt.Errorf("error upserting actor profile: %w", err)
-
}
+
return upsertRecord(models.NewActorProfile, opts)
case syntax.NSID("app.bsky.actor.status"):
-
status := models.NewActorStatus(uri, *rec)
-
if err := hs.store.Where(models.ActorStatus{ID: string(uri)}).Assign(status).FirstOrCreate(&models.ActorStatus{}).Error; err != nil {
-
return fmt.Errorf("error upserting actor status: %w", err)
-
}
+
return upsertRecord(models.NewActorStatus, opts)
case syntax.NSID("app.bsky.feed.generator"):
-
feedgen := models.NewFeedGenerator(uri, *rec)
-
if err := hs.store.Where(models.FeedGenerator{ID: string(uri)}).Assign(feedgen).FirstOrCreate(&models.FeedGenerator{}).Error; err != nil {
-
return fmt.Errorf("error upserting feed generator: %w", err)
-
}
+
return upsertRecord(models.NewFeedGenerator, opts)
case syntax.NSID("app.bsky.feed.like"):
-
like := models.NewFeedLike(uri, *rec)
-
if err := hs.store.Where(models.FeedLike{ID: string(uri)}).Assign(like).FirstOrCreate(&models.FeedLike{}).Error; err != nil {
-
return fmt.Errorf("error upserting feed like: %w", err)
-
}
+
return upsertRecord(models.NewFeedLike, opts)
case syntax.NSID("app.bsky.feed.post"):
-
post := models.NewFeedPost(uri, *rec)
-
if err := hs.store.Where(models.FeedPost{ID: string(uri)}).Assign(post).FirstOrCreate(&models.FeedPost{}).Error; err != nil {
-
return fmt.Errorf("error upserting feed like: %w", err)
-
}
+
return upsertRecord(models.NewFeedPost, opts)
case syntax.NSID("app.bsky.feed.postgate"):
-
postgate := models.NewFeedPostgate(uri, *rec)
-
if err := hs.store.Where(models.FeedPostgate{ID: string(uri)}).Assign(postgate).FirstOrCreate(&models.FeedPostgate{}).Error; err != nil {
-
return fmt.Errorf("error upserting feed postgate: %w", err)
-
}
+
return upsertRecord(models.NewFeedPostgate, opts)
case syntax.NSID("app.bsky.feed.repost"):
return upsertRecord(models.NewFeedRepost, opts)
case syntax.NSID("app.bsky.feed.threadgate"):
-
threadgate := models.NewFeedThreadgate(uri, *rec)
-
if err := hs.store.Where(models.FeedThreadgate{ID: string(uri)}).Assign(threadgate).FirstOrCreate(&models.FeedThreadgate{}).Error; err != nil {
-
return fmt.Errorf("error upserting feed threadgate: %w", err)
-
}
+
return upsertRecord(models.NewFeedThreadgate, opts)
case syntax.NSID("app.bsky.graph.block"):
-
block := models.NewGraphBlock(uri, *rec)
-
if err := hs.store.Where(models.GraphBlock{ID: string(uri)}).Assign(block).FirstOrCreate(&models.GraphBlock{}).Error; err != nil {
-
return fmt.Errorf("error upserting graph block: %w", err)
-
}
+
return upsertRecord(models.NewGraphBlock, opts)
case syntax.NSID("app.bsky.graph.follow"):
-
follow := models.NewGraphFollow(uri, *rec)
-
if err := hs.store.Where(models.GraphFollow{ID: string(uri)}).Assign(follow).FirstOrCreate(&models.GraphFollow{}).Error; err != nil {
-
return fmt.Errorf("error upserting graph follow: %w", err)
-
}
+
return upsertRecord(models.NewGraphFollow, opts)
case syntax.NSID("app.bsky.graph.list"):
-
list := models.NewGraphList(uri, *rec)
-
if err := hs.store.Where(models.GraphList{ID: string(uri)}).Assign(list).FirstOrCreate(&models.GraphList{}).Error; err != nil {
-
return fmt.Errorf("error upserting graph list: %w", err)
-
}
+
return upsertRecord(models.NewGraphList, opts)
case syntax.NSID("app.bsky.graph.listblock"):
-
listblock := models.NewGraphListblock(uri, *rec)
-
if err := hs.store.Where(models.GraphListblock{ID: string(uri)}).Assign(listblock).FirstOrCreate(&models.GraphListblock{}).Error; err != nil {
-
return fmt.Errorf("error upserting graph listblock: %w", err)
-
}
+
return upsertRecord(models.NewGraphListblock, opts)
case syntax.NSID("app.bsky.graph.listitem"):
-
listitem := models.NewGraphListitem(uri, *rec)
-
if err := hs.store.Where(models.GraphListitem{ID: string(uri)}).Assign(listitem).FirstOrCreate(&models.GraphListitem{}).Error; err != nil {
-
return fmt.Errorf("error upserting graph listitem: %w", err)
-
}
+
return upsertRecord(models.NewGraphListitem, opts)
case syntax.NSID("app.bsky.graph.starterpack"):
-
pack := models.NewGraphStarterpack(uri, *rec)
-
if err := hs.store.Where(models.GraphStarterpack{ID: string(uri)}).Assign(pack).FirstOrCreate(&models.GraphStarterpack{}).Error; err != nil {
-
return fmt.Errorf("error upserting graph starterpack: %w", err)
-
}
+
return upsertRecord(models.NewGraphStarterpack, opts)
case syntax.NSID("app.bsky.graph.verification"):
-
verification := models.NewGraphVerification(uri, *rec)
-
if err := hs.store.Where(models.GraphVerification{ID: string(uri)}).Assign(verification).FirstOrCreate(&models.GraphVerification{}).Error; err != nil {
-
return fmt.Errorf("error upserting graph verification: %w", err)
-
}
+
return upsertRecord(models.NewGraphVerification, opts)
case syntax.NSID("app.bsky.labeler.service"):
-
labeler := models.NewLabelerService(uri, *rec)
-
if err := hs.store.Where(models.LabelerService{ID: string(uri)}).Assign(labeler).FirstOrCreate(&models.LabelerService{}).Error; err != nil {
-
return fmt.Errorf("error upserting labeler service: %w", err)
-
}
+
return upsertRecord(models.NewLabelerService, opts)
case syntax.NSID("chat.bsky.actor.declaration"):
-
declaration := models.NewActorDeclaration(uri, *rec)
-
if err := hs.store.Where(models.ActorDeclaration{ID: string(uri)}).Assign(declaration).FirstOrCreate(&models.ActorDeclaration{}).Error; err != nil {
-
return fmt.Errorf("error upserting chat actor declaration: %w", err)
-
}
+
return upsertRecord(models.NewActorDeclaration, opts)
}
return nil