an app.bsky.* indexer

switch to upsertRecord

Changed files
+16 -65
cmd
monarch
+16 -65
cmd/monarch/handlers.go
··· 97 97 return nil 98 98 } 99 99 100 - // handles both creates and updates 101 100 func (hs *HandlerService) HandleUpsert(ctx context.Context, repo string, rev string, path string, rec *[]byte, cid *cid.Cid, action Action) error { 102 101 uri, err := syntax.ParseATURI(fmt.Sprintf("at://%s/%s", repo, path)) 103 102 if err != nil { ··· 108 107 109 108 switch uri.Collection() { 110 109 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) 114 - } 110 + return upsertRecord(models.NewActorProfile, opts) 115 111 116 112 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) 120 - } 113 + return upsertRecord(models.NewActorStatus, opts) 121 114 122 115 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) 126 - } 116 + return upsertRecord(models.NewFeedGenerator, opts) 127 117 128 118 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) 132 - } 119 + return upsertRecord(models.NewFeedLike, opts) 133 120 134 121 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) 138 - } 122 + return upsertRecord(models.NewFeedPost, opts) 139 123 140 124 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) 144 - } 125 + return upsertRecord(models.NewFeedPostgate, opts) 145 126 146 127 case syntax.NSID("app.bsky.feed.repost"): 147 128 return upsertRecord(models.NewFeedRepost, opts) 148 129 149 130 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) 153 - } 131 + return upsertRecord(models.NewFeedThreadgate, opts) 154 132 155 133 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) 159 - } 134 + return upsertRecord(models.NewGraphBlock, opts) 160 135 161 136 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) 165 - } 137 + return upsertRecord(models.NewGraphFollow, opts) 166 138 167 139 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) 171 - } 140 + return upsertRecord(models.NewGraphList, opts) 172 141 173 142 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) 177 - } 143 + return upsertRecord(models.NewGraphListblock, opts) 178 144 179 145 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) 183 - } 146 + return upsertRecord(models.NewGraphListitem, opts) 184 147 185 148 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) 189 - } 149 + return upsertRecord(models.NewGraphStarterpack, opts) 190 150 191 151 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) 195 - } 152 + return upsertRecord(models.NewGraphVerification, opts) 196 153 197 154 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) 201 - } 155 + return upsertRecord(models.NewLabelerService, opts) 202 156 203 157 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) 207 - } 158 + return upsertRecord(models.NewActorDeclaration, opts) 208 159 } 209 160 210 161 return nil