package models import ( "bytes" "log/slog" "time" appbsky "github.com/bluesky-social/indigo/api/bsky" "github.com/bluesky-social/indigo/atproto/syntax" ) type FeedPostgate struct { ID string `gorm:"primaryKey"` CreatedAt string DetachedEmbeddingUris []FeedPostgate_DetachedEmbeddingUri EmbeddingRules []FeedPostgate_EmbeddingRule Post string AutoCreatedAt time.Time `gorm:"autoCreateTime"` AutoUpdatedAt time.Time `gorm:"autoUpdateTime"` } type FeedPostgate_DetachedEmbeddingUri struct { FeedPostgateID string Value string } type FeedPostgate_EmbeddingRule struct { FeedPostgateID string Rule string } func NewFeedPostgate(uri syntax.ATURI, rec []byte) *FeedPostgate { var out appbsky.FeedPostgate if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil { slog.Error("could not unmarshal feed post CBOR", "err", err) return nil } postgate := FeedPostgate{ ID: string(uri), CreatedAt: out.CreatedAt, Post: out.Post, } for _, uri := range out.DetachedEmbeddingUris { postgate.DetachedEmbeddingUris = append(postgate.DetachedEmbeddingUris, FeedPostgate_DetachedEmbeddingUri{ FeedPostgateID: postgate.ID, Value: uri, }) } if out.EmbeddingRules != nil { for _, rule := range out.EmbeddingRules { if rule.FeedPostgate_DisableRule != nil { postgate.EmbeddingRules = append(postgate.EmbeddingRules, FeedPostgate_EmbeddingRule{ FeedPostgateID: postgate.ID, Rule: rule.FeedPostgate_DisableRule.LexiconTypeID, }) } } } return &postgate }