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 []LabelerService_ReasonType 19 SubjectCollections []LabelerService_SubjectCollection 20 SubjctTypes []LabelerService_SubjectType 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 `gorm:"embedded"` 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 45type LabelerService_ReasonType struct { 46 LabelerServiceID string 47 Value *string 48} 49 50type LabelerService_SubjectCollection struct { 51 LabelerServiceID string 52 Value string 53} 54 55type LabelerService_SubjectType struct { 56 LabelerServiceID string 57 Value *string 58} 59 60func NewLabelerService(uri syntax.ATURI, rec []byte) *LabelerService { 61 var out appbsky.LabelerService 62 if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil { 63 slog.Error("could not unmarshal labeler service CBOR", "err", err) 64 return nil 65 } 66 67 labeler := LabelerService{ 68 CreatedAt: out.CreatedAt, 69 } 70 71 if out.ReasonTypes != nil { 72 for _, reasontype := range out.ReasonTypes { 73 labeler.ReasonTypes = append(labeler.ReasonTypes, LabelerService_ReasonType{ 74 LabelerServiceID: labeler.ID, 75 Value: reasontype, 76 }) 77 } 78 } 79 80 for _, collection := range out.SubjectCollections { 81 labeler.SubjectCollections = append(labeler.SubjectCollections, LabelerService_SubjectCollection{ 82 LabelerServiceID: labeler.ID, 83 Value: collection, 84 }) 85 } 86 87 if out.SubjectTypes != nil { 88 for _, stype := range out.SubjectTypes { 89 labeler.SubjctTypes = append(labeler.SubjctTypes, LabelerService_SubjectType{ 90 LabelerServiceID: labeler.ID, 91 Value: stype, 92 }) 93 } 94 } 95 96 if out.Labels != nil && out.Labels.LabelDefs_SelfLabels != nil && out.Labels.LabelDefs_SelfLabels.Values != nil { 97 for _, label := range out.Labels.LabelDefs_SelfLabels.Values { 98 labeler.Labels = append(labeler.Labels, LabelerService_Label{ 99 Value: label.Val, 100 }) 101 } 102 } 103 104 if out.Policies != nil && out.Policies.LabelValueDefinitions != nil && out.Policies.LabelValues != nil { 105 for idx, valdef := range out.Policies.LabelValueDefinitions { 106 policy := LabelerService_Policy{ 107 LabelerServiceID: labeler.ID, 108 Definition: LabelerService_PolicyDefinition{ 109 AdultOnly: valdef.AdultOnly, 110 Blurs: valdef.Blurs, 111 DefaultSetting: valdef.DefaultSetting, 112 Identifier: valdef.Identifier, 113 Severity: valdef.Severity, 114 }, 115 Label: out.Policies.LabelValues[idx], 116 } 117 labeler.Policies = append(labeler.Policies, policy) 118 } 119 } 120 121 return &labeler 122}