an app.bsky.* indexer
1package models 2 3import ( 4 "bytes" 5 "log/slog" 6 "time" 7 8 appbsky "github.com/bluesky-social/indigo/api/bsky" 9 "github.com/bluesky-social/indigo/atproto/syntax" 10) 11 12type LabelerService struct { 13 ID string `gorm:"primaryKey"` 14 15 CreatedAt string 16 Labels []LabelerService_Label 17 Policies []LabelerService_Policy 18 ReasonTypes []*string 19 SubjectCollections []string 20 SubjctTypes []*string 21 22 AutoCreatedAt time.Time `gorm:"autoCreateTime"` 23 AutoUpdatedAt time.Time `gorm:"autoUpdateTime"` 24} 25 26type LabelerService_Label struct { 27 LabelerServiceID string 28 Value string 29} 30 31type LabelerService_Policy struct { 32 LabelerServiceID string 33 Definition LabelerService_PolicyDefinition 34 Label *string 35} 36 37type LabelerService_PolicyDefinition struct { 38 AdultOnly *bool 39 Blurs string 40 DefaultSetting *string 41 Identifier string 42 Severity string 43} 44 45func NewLabelerService(uri syntax.ATURI, rec []byte) *LabelerService { 46 var out appbsky.LabelerService 47 if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil { 48 slog.Error("could not unmarshal labeler service CBOR", "err", err) 49 return nil 50 } 51 52 labeler := LabelerService{ 53 CreatedAt: out.CreatedAt, 54 } 55 56 if out.ReasonTypes != nil { 57 for _, reasontype := range out.ReasonTypes { 58 labeler.ReasonTypes = append(labeler.ReasonTypes, reasontype) 59 } 60 } 61 62 for _, collection := range out.SubjectCollections { 63 labeler.SubjectCollections = append(labeler.SubjectCollections, collection) 64 } 65 66 if out.SubjectTypes != nil { 67 for _, stype := range out.SubjectTypes { 68 labeler.SubjctTypes = append(labeler.SubjctTypes, stype) 69 } 70 } 71 72 if out.Labels != nil && out.Labels.LabelDefs_SelfLabels != nil && out.Labels.LabelDefs_SelfLabels.Values != nil { 73 for _, label := range out.Labels.LabelDefs_SelfLabels.Values { 74 labeler.Labels = append(labeler.Labels, LabelerService_Label{ 75 Value: label.Val, 76 }) 77 } 78 } 79 80 if out.Policies != nil && out.Policies.LabelValueDefinitions != nil && out.Policies.LabelValues != nil { 81 for idx, valdef := range out.Policies.LabelValueDefinitions { 82 policy := LabelerService_Policy{ 83 Definition: LabelerService_PolicyDefinition{ 84 AdultOnly: valdef.AdultOnly, 85 Blurs: valdef.Blurs, 86 DefaultSetting: valdef.DefaultSetting, 87 Identifier: valdef.Identifier, 88 Severity: valdef.Severity, 89 }, 90 Label: out.Policies.LabelValues[idx], 91 } 92 labeler.Policies = append(labeler.Policies, policy) 93 } 94 } 95 96 return &labeler 97}