From 8f39d3c036588782f36d5ff90ce2839fd75fa496 Mon Sep 17 00:00:00 2001 From: Guillermo Serrahima Date: Thu, 19 Feb 2026 14:27:24 +0100 Subject: added bsky posts --- backend/notes/app.bsky.feed.post.go | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 backend/notes/app.bsky.feed.post.go (limited to 'backend/notes/app.bsky.feed.post.go') diff --git a/backend/notes/app.bsky.feed.post.go b/backend/notes/app.bsky.feed.post.go new file mode 100644 index 0000000..21256be --- /dev/null +++ b/backend/notes/app.bsky.feed.post.go @@ -0,0 +1,74 @@ +package notes + +import ( + "fmt" + "strings" + "time" +) + +type AppBskyFeedPostNote struct { + URI string + AuthorDID string + AuthorHandle string + Text string + CreatedAt time.Time + ReplyTo *string +} + +type AppBskyFeedPostRecord struct { + URI string `json:"uri"` + Value struct { + Text string `json:"text"` + CreatedAt string `json:"createdAt"` + Reply *struct { + Parent struct { + URI string `json:"uri"` + } `json:"parent"` + } `json:"reply,omitempty"` + } `json:"value"` +} + +func (bp *AppBskyFeedPostNote) GetID() string { + return bp.URI +} + +func (bp *AppBskyFeedPostNote) GetAuthorDID() string { + return bp.AuthorDID +} + +func (bp *AppBskyFeedPostNote) GetAuthorHandle() string { + return bp.AuthorHandle +} + +func (bp *AppBskyFeedPostNote) GetTimestamp() time.Time { + return bp.CreatedAt +} + +func (bp *AppBskyFeedPostNote) GetReplyTo() *string { + return bp.ReplyTo +} + +func AppBskyFeedPostFromRecord(record AppBskyFeedPostRecord) (*AppBskyFeedPostNote, error) { + createdAt, err := time.Parse(time.RFC3339, record.Value.CreatedAt) + if err != nil { + return nil, fmt.Errorf("failed to parse timestamp: %w", err) + } + if record.Value.Text == "" { + return nil, fmt.Errorf("missing required field: text") + } + if record.URI == "" { + return nil, fmt.Errorf("missing required field: uri") + } + + parts := strings.Split(record.URI, "/") // at://DID/collection/rkey + did := parts[2] + + return &AppBskyFeedPostNote{ + URI: record.URI, + AuthorDID: did, + AuthorHandle: "author_handle", // wip + CreatedAt: createdAt, + Text: record.Value.Text, + ReplyTo: &record.Value.Reply.Parent.URI, + }, nil +} -- cgit v1.2.3