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}