package models import ( "fmt" "time" "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/api/tangled" ) type Follow struct { UserDid string SubjectDid string FollowedAt time.Time Rkey string } func (f *Follow) AsRecord() tangled.GraphFollow { return tangled.GraphFollow{ Subject: f.SubjectDid, CreatedAt: f.FollowedAt.Format(time.RFC3339), } } func FollowFromRecord(did syntax.DID, rkey syntax.RecordKey, record tangled.GraphFollow) (Follow, error) { subjectDid, err := syntax.ParseDID(record.Subject) if err != nil { return Follow{}, fmt.Errorf("subject should be valid did: %w", err) } created, err := time.Parse(time.RFC3339, record.CreatedAt) if err != nil { return Follow{}, fmt.Errorf("invalid time format '%s'", record.CreatedAt) } return Follow{ UserDid: did.String(), Rkey: rkey.String(), SubjectDid: subjectDid.String(), FollowedAt: created, }, nil } type FollowStats struct { Followers int64 Following int64 } type FollowStatus int const ( IsNotFollowing FollowStatus = iota IsFollowing IsSelf ) func (s FollowStatus) String() string { switch s { case IsNotFollowing: return "IsNotFollowing" case IsFollowing: return "IsFollowing" case IsSelf: return "IsSelf" default: return "IsNotFollowing" } }