package models import ( "bytes" "log/slog" "time" appbsky "github.com/bluesky-social/indigo/api/bsky" "github.com/bluesky-social/indigo/atproto/syntax" ) type FeedLike struct { ID string `gorm:"primaryKey"` CreatedAt string Subject FeedLike_Subject Via FeedLike_Via AutoCreatedAt time.Time `gorm:"autoCreateTime"` AutoUpdatedAt time.Time `gorm:"autoUpdateTime"` } type FeedLike_Subject struct { FeedLikeID string StrongRef } type FeedLike_Via struct { FeedLikeID string StrongRef } func NewFeedLike(uri syntax.ATURI, rec []byte) *FeedLike { var out appbsky.FeedLike if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil { slog.Error("could not unmarshal feed like CBOR", "err", err) return nil } like := FeedLike{ ID: string(uri), CreatedAt: out.CreatedAt, } if out.Subject != nil { like.Subject = FeedLike_Subject{ FeedLikeID: like.ID, StrongRef: StrongRef{ Uri: out.Subject.Uri, Cid: out.Subject.Cid, }, } } if out.Via != nil { like.Via = FeedLike_Via{ FeedLikeID: like.ID, StrongRef: StrongRef{ Uri: out.Via.Uri, Cid: out.Via.Cid, }, } } return &like }