package models import ( "fmt" "time" "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/api/tangled" ) type Star struct { Did string RepoAt syntax.ATURI Created time.Time Rkey string } func (s *Star) AsRecord() tangled.FeedStar { return tangled.FeedStar{ Subject: s.RepoAt.String(), CreatedAt: s.Created.Format(time.RFC3339), } } func StarFromRecord(did syntax.DID, rkey syntax.RecordKey, record tangled.FeedStar) (Star, error) { subjectAt, err := syntax.ParseATURI(record.Subject) if err != nil { return Star{}, fmt.Errorf("subject should be valid at-uri: %w", err) } created, err := time.Parse(time.RFC3339, record.CreatedAt) if err != nil { return Star{}, fmt.Errorf("invalid time format '%s'", record.CreatedAt) } return Star{ Did: did.String(), Rkey: rkey.String(), RepoAt: subjectAt, Created: created, }, nil } // RepoStar is used for reverse mapping to repos type RepoStar struct { Star Repo *Repo } // StringStar is used for reverse mapping to strings type StringStar struct { Star String *String }