an app.bsky.* indexer
at master 1.3 kB view raw
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 ActorStatus struct { 13 ID string `gorm:"primaryKey"` 14 15 CreatedAt string 16 DurationMinutes *int64 17 Embed *ActorStatus_Embed `gorm:"embedded;embeddedPrefix:embed_"` 18 Status string 19 20 AutoCreatedAt time.Time `gorm:"autoCreateTime"` 21 AutoUpdatedAt time.Time `gorm:"autoUpdateTime"` 22} 23 24type ActorStatus_Embed struct { 25 Description string 26 Title string 27 Uri string 28} 29 30func NewActorStatus(uri syntax.ATURI, rec []byte) *ActorStatus { 31 var out appbsky.ActorStatus 32 if err := out.UnmarshalCBOR(bytes.NewReader(rec)); err != nil { 33 slog.Error("could not unmarshal actor status CBOR", "err", err) 34 return nil 35 } 36 37 status := ActorStatus{ 38 ID: string(uri), 39 CreatedAt: out.CreatedAt, 40 DurationMinutes: out.DurationMinutes, 41 Status: out.Status, 42 } 43 44 if out.Embed != nil && out.Embed.EmbedExternal != nil && out.Embed.EmbedExternal.External != nil { 45 status.Embed = &ActorStatus_Embed{ 46 Description: out.Embed.EmbedExternal.External.Description, 47 Title: out.Embed.EmbedExternal.External.Title, 48 Uri: out.Embed.EmbedExternal.External.Uri, 49 } 50 } 51 52 return &status 53}