package fetchers import ( "encoding/json" "fmt" "io" "llostre/backend/notes" "net/http" ) type ListRecordsResponse struct { Records []notes.AppBskyFeedPostRecord `json:"records"` } func FetchAppBskyFeedPosts(did string, pdsURL string) ([]notes.AppBskyFeedPostNote, error) { url := fmt.Sprintf("%s/xrpc/com.atproto.repo.listRecords?repo=%s&collection=app.bsky.feed.post&limit=50", pdsURL, did) resp, err := http.Get(url) if err != nil { return nil, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return nil, err } var response ListRecordsResponse err = json.Unmarshal(body, &response) if err != nil { return nil, err } profile, err := FetchProfile(did, pdsURL) if err != nil { fmt.Printf("Profile fetch failed for %s: %v\n", did, err) } else { fmt.Printf("Fetched profile: %+v\n", profile) } var posts []notes.AppBskyFeedPostNote for _, record := range response.Records { bp, err := notes.AppBskyFeedPostFromRecord(record, profile) if err != nil { fmt.Printf("skipping malformed record %s: %v\n", record.URI, err) continue } posts = append(posts, *bp) } return posts, nil }