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 FeedPostgate struct { 13 ID string `gorm:"primaryKey"` 14 15 CreatedAt string 16 DetachedEmbeddingUris []FeedPostgate_DetachedEmbeddingUri 17 EmbeddingRules []FeedPostgate_EmbeddingRule 18 Post string 19 20 AutoCreatedAt time.Time `gorm:"autoCreateTime"` 21 AutoUpdatedAt time.Time `gorm:"autoUpdateTime"` 22} 23 24type FeedPostgate_DetachedEmbeddingUri struct { 25 FeedPostgateID string 26 Value string 27} 28 29type FeedPostgate_EmbeddingRule struct { 30 FeedPostgateID string 31 Rule string 32} 33 34func NewFeedPostgate(uri syntax.ATURI, rec []byte) *FeedPostgate { 35 var out appbsky.FeedPostgate 36 if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil { 37 slog.Error("could not unmarshal feed post CBOR", "err", err) 38 return nil 39 } 40 41 postgate := FeedPostgate{ 42 ID: string(uri), 43 CreatedAt: out.CreatedAt, 44 Post: out.Post, 45 } 46 47 for _, uri := range out.DetachedEmbeddingUris { 48 postgate.DetachedEmbeddingUris = append(postgate.DetachedEmbeddingUris, FeedPostgate_DetachedEmbeddingUri{ 49 FeedPostgateID: postgate.ID, 50 Value: uri, 51 }) 52 } 53 54 if out.EmbeddingRules != nil { 55 for _, rule := range out.EmbeddingRules { 56 if rule.FeedPostgate_DisableRule != nil { 57 postgate.EmbeddingRules = append(postgate.EmbeddingRules, FeedPostgate_EmbeddingRule{ 58 FeedPostgateID: postgate.ID, 59 Rule: rule.FeedPostgate_DisableRule.LexiconTypeID, 60 }) 61 } 62 } 63 } 64 65 return &postgate 66}