aboutsummaryrefslogtreecommitdiff
path: root/backend/general
diff options
context:
space:
mode:
authorGuillermo Serrahima <dev@vylion.com>2026-03-18 19:50:39 +0100
committerGuillermo Serrahima <dev@vylion.com>2026-03-18 20:24:46 +0100
commit9181a6e454e3b294004923b2036b9852212cce7f (patch)
treea6ad06ada79c8aacea1bb22010c6b40d67e669da /backend/general
parente7b376211cdf013528c1919a28caa28cc0ec9c93 (diff)
downloadllostre-9181a6e454e3b294004923b2036b9852212cce7f.tar.xz
llostre-9181a6e454e3b294004923b2036b9852212cce7f.zip
added slingshot fetching + refactored fetching in general
Diffstat (limited to 'backend/general')
-rw-r--r--backend/general/profiles.go5
-rw-r--r--backend/general/records.go70
2 files changed, 70 insertions, 5 deletions
diff --git a/backend/general/profiles.go b/backend/general/profiles.go
index be74364..b545e60 100644
--- a/backend/general/profiles.go
+++ b/backend/general/profiles.go
@@ -22,8 +22,3 @@ type ProfileRecord struct {
} `json:"banner,omitempty"`
Pronouns string `json:"pronouns"`
}
-
-type ProfileRecordResponse struct {
- URI string `json:"uri"`
- Value ProfileRecord `json:"value"`
-}
diff --git a/backend/general/records.go b/backend/general/records.go
new file mode 100644
index 0000000..d623862
--- /dev/null
+++ b/backend/general/records.go
@@ -0,0 +1,70 @@
+package general
+
+import (
+ "encoding/json"
+ "fmt"
+ "io"
+ "log/slog"
+ "net/http"
+)
+
+type RawRecord struct {
+ URI string `json:"uri"`
+ Value json.RawMessage `json:"value"`
+}
+
+func FetchRawRecordCollection(logger *slog.Logger, did, collection, baseURL string) ([]RawRecord, error) {
+ url := fmt.Sprintf("%s/xrpc/com.atproto.repo.listRecords?repo=%s&collection=%s", baseURL, did, collection)
+
+ logger.Debug("fetching raw record collection", "did", did, "endpoint", baseURL, "collection", collection)
+
+ resp, err := http.Get(url)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != 200 {
+ body, _ := io.ReadAll(resp.Body)
+ return nil, fmt.Errorf("server returned %d: %s", resp.StatusCode, string(body))
+ }
+
+ var result struct {
+ Records []RawRecord `json:"records"`
+ }
+ if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
+ return nil, err
+ }
+
+ return result.Records, nil
+}
+
+func FetchRawRecordByURI(logger *slog.Logger, uri, baseURL string) (*RawRecord, error) {
+ repo, collection, rkey, err := ParseURI(uri)
+ if err != nil {
+ return nil, err
+ }
+
+ url := fmt.Sprintf("%s/xrpc/com.atproto.repo.getRecord?repo=%s&collection=%s&rkey=%s",
+ baseURL, repo, collection, rkey)
+
+ logger.Debug("fetching raw record by URI", "uri", uri, "endpoint", baseURL)
+
+ resp, err := http.Get(url)
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != 200 {
+ body, _ := io.ReadAll(resp.Body)
+ return nil, fmt.Errorf("endpoint returned %d: %s", resp.StatusCode, string(body))
+ }
+
+ var result RawRecord
+ if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
+ return nil, err
+ }
+
+ return &result, nil
+}