an app.bsky.* indexer

fixup LabelerService and skip some collections for now

Changed files
+53 -15
cmd
monarch
models
+20 -8
cmd/monarch/handlers.go
···
import (
"context"
"fmt"
+
"log/slog"
"github.com/bluesky-social/indigo/atproto/syntax"
"github.com/ipfs/go-cid"
···
&models.LabelerService{},
&models.LabelerService_Label{},
&models.LabelerService_Policy{},
+
&models.LabelerService_ReasonType{},
+
&models.LabelerService_SubjectCollection{},
+
&models.LabelerService_SubjectType{},
}
for _, migration := range migrations {
store.AutoMigrate(migration)
···
// 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 nil
case syntax.NSID("app.bsky.actor.status"):
status := models.NewActorStatus(uri, *rec)
···
}
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)
-
}
+
// 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 nil
case syntax.NSID("app.bsky.graph.list"):
list := models.NewGraphList(uri, *rec)
···
}
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)
-
}
+
// 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 nil
case syntax.NSID("app.bsky.graph.listitem"):
listitem := models.NewGraphListitem(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)
}
+
+
default:
+
return nil
}
+
+
slog.Info("created record", "uri", uri)
return nil
}
+33 -7
models/labeler_service.go
···
CreatedAt string
Labels []LabelerService_Label
Policies []LabelerService_Policy
-
ReasonTypes []*string
-
SubjectCollections []string
-
SubjctTypes []*string
+
ReasonTypes []LabelerService_ReasonType
+
SubjectCollections []LabelerService_SubjectCollection
+
SubjctTypes []LabelerService_SubjectType
AutoCreatedAt time.Time `gorm:"autoCreateTime"`
AutoUpdatedAt time.Time `gorm:"autoUpdateTime"`
···
type LabelerService_Policy struct {
LabelerServiceID string
-
Definition LabelerService_PolicyDefinition
+
Definition LabelerService_PolicyDefinition `gorm:"embedded"`
Label *string
}
···
Severity string
}
+
type LabelerService_ReasonType struct {
+
LabelerServiceID string
+
Value *string
+
}
+
+
type LabelerService_SubjectCollection struct {
+
LabelerServiceID string
+
Value string
+
}
+
+
type LabelerService_SubjectType struct {
+
LabelerServiceID string
+
Value *string
+
}
+
+
func NewLabelerService(uri syntax.ATURI, rec []byte) *LabelerService {
var out appbsky.LabelerService
if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil {
···
if out.ReasonTypes != nil {
for _, reasontype := range out.ReasonTypes {
-
labeler.ReasonTypes = append(labeler.ReasonTypes, reasontype)
+
labeler.ReasonTypes = append(labeler.ReasonTypes, LabelerService_ReasonType{
+
LabelerServiceID: labeler.ID,
+
Value: reasontype,
+
})
}
}
for _, collection := range out.SubjectCollections {
-
labeler.SubjectCollections = append(labeler.SubjectCollections, collection)
+
labeler.SubjectCollections = append(labeler.SubjectCollections, LabelerService_SubjectCollection{
+
LabelerServiceID: labeler.ID,
+
Value: collection,
+
})
}
if out.SubjectTypes != nil {
for _, stype := range out.SubjectTypes {
-
labeler.SubjctTypes = append(labeler.SubjctTypes, stype)
+
labeler.SubjctTypes = append(labeler.SubjctTypes, LabelerService_SubjectType{
+
LabelerServiceID: labeler.ID,
+
Value: stype,
+
})
}
}
···
if out.Policies != nil && out.Policies.LabelValueDefinitions != nil && out.Policies.LabelValues != nil {
for idx, valdef := range out.Policies.LabelValueDefinitions {
policy := LabelerService_Policy{
+
LabelerServiceID: labeler.ID,
Definition: LabelerService_PolicyDefinition{
AdultOnly: valdef.AdultOnly,
Blurs: valdef.Blurs,