package models import ( "bytes" "log/slog" "time" appbsky "github.com/bluesky-social/indigo/api/bsky" "github.com/bluesky-social/indigo/atproto/syntax" ) type ActorStatus struct { ID string `gorm:"primaryKey"` CreatedAt string DurationMinutes *int64 Embed *ActorStatus_Embed `gorm:"embedded;embeddedPrefix:embed_"` Status string AutoCreatedAt time.Time `gorm:"autoCreateTime"` AutoUpdatedAt time.Time `gorm:"autoUpdateTime"` } type ActorStatus_Embed struct { Description string Title string Uri string } func NewActorStatus(uri syntax.ATURI, rec []byte) *ActorStatus { var out appbsky.ActorStatus if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil { slog.Error("could not unmarshal actor status CBOR", "err", err) return nil } status := ActorStatus{ ID: string(uri), CreatedAt: out.CreatedAt, DurationMinutes: out.DurationMinutes, Status: out.Status, } if out.Embed != nil && out.Embed.EmbedExternal != nil && out.Embed.EmbedExternal.External != nil { status.Embed = &ActorStatus_Embed{ Description: out.Embed.EmbedExternal.External.Description, Title: out.Embed.EmbedExternal.External.Title, Uri: out.Embed.EmbedExternal.External.Uri, } } return &status }