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}