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 Status string AutoCreatedAt time.Time `gorm:"autoCreateTime"` AutoUpdatedAt time.Time `gorm:"autoUpdateTime"` } type ActorStatus_Embed struct { ActorStatusID string 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{ 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{ ActorStatusID: status.ID, Description: out.Embed.EmbedExternal.External.Description, Title: out.Embed.EmbedExternal.External.Title, Uri: out.Embed.EmbedExternal.External.Uri, } } return &status }