diff options
| author | Guillermo Serrahima <dev@vylion.com> | 2026-03-18 22:02:13 +0100 |
|---|---|---|
| committer | Guillermo Serrahima <dev@vylion.com> | 2026-03-20 00:50:46 +0100 |
| commit | 59545c874d8635c39ccdbecf84f953686dd5c03c (patch) | |
| tree | 2c0e682acd56925c2a65dcf2c96a22c95202e550 /backend/fetchers | |
| parent | 9181a6e454e3b294004923b2036b9852212cce7f (diff) | |
| download | llostre-59545c874d8635c39ccdbecf84f953686dd5c03c.tar.xz llostre-59545c874d8635c39ccdbecf84f953686dd5c03c.zip | |
more naming refactors
Diffstat (limited to 'backend/fetchers')
| -rw-r--r-- | backend/fetchers/app.bsky.actor.go | 43 | ||||
| -rw-r--r-- | backend/fetchers/app.bsky.feed.go | 28 | ||||
| -rw-r--r-- | backend/fetchers/cache.go | 19 |
3 files changed, 38 insertions, 52 deletions
diff --git a/backend/fetchers/app.bsky.actor.go b/backend/fetchers/app.bsky.actor.go index 45ced77..e07f5be 100644 --- a/backend/fetchers/app.bsky.actor.go +++ b/backend/fetchers/app.bsky.actor.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "llostre/backend/general" + "llostre/backend/notes" "log/slog" "net" "net/http" @@ -129,7 +130,7 @@ func FetchHandleAndPDS(did string) (string, string, error) { return handle, pds, nil } -func FetchProfile(logger *slog.Logger, did, pdsURL, slingshotURL string, cache *Cache) (*general.Profile, error) { +func FetchAppBskyActorProfile(logger *slog.Logger, did, pdsURL, slingshotURL string, cache *Cache) (*notes.Author, error) { // construct profile record URI uri := fmt.Sprintf("at://%s/app.bsky.actor.profile/self", did) @@ -139,7 +140,7 @@ func FetchProfile(logger *slog.Logger, did, pdsURL, slingshotURL string, cache * if err != nil { logger.Warn("slingshot profile fetch failed", "did", did, "error", err) } else { - return parseProfile(did, rawRecord, cache) + return parseAppBskyActorProfile(did, rawRecord, cache) } } @@ -149,47 +150,33 @@ func FetchProfile(logger *slog.Logger, did, pdsURL, slingshotURL string, cache * return nil, err } - return parseProfile(did, rawRecord, cache) + return parseAppBskyActorProfile(did, rawRecord, cache) } -func FetchProfiles(logger *slog.Logger, dids []string, pdsURL, slingshotURL string, cache *Cache) map[string]general.Profile { - profiles := make(map[string]general.Profile) +func FetchAppBskyActorProfiles(logger *slog.Logger, dids []string, pdsURL, slingshotURL string, cache *Cache) map[string]notes.Author { + authors := make(map[string]notes.Author) for _, did := range dids { - profile, err := FetchProfile(logger, did, pdsURL, slingshotURL, cache) + author, err := FetchAppBskyActorProfile(logger, did, pdsURL, slingshotURL, cache) if err == nil { - profiles[did] = *profile + authors[did] = *author } } - return profiles + return authors } -func parseProfile(did string, rawRecord *general.RawRecord, cache *Cache) (*general.Profile, error) { - var profileData general.ProfileRecord - if err := json.Unmarshal(rawRecord.Value, &profileData); err != nil { +func parseAppBskyActorProfile(did string, rawRecord *general.RawRecord, cache *Cache) (*notes.Author, error) { + var profile notes.AppBskyActorProfileRecord + if err := json.Unmarshal(rawRecord.Value, &profile); err != nil { return nil, err } - var avatarURL, bannerURL string - if profileData.Avatar != nil { - avatarURL = fmt.Sprintf("https://cdn.bsky.app/img/avatar/plain/%s/%s@jpeg", did, profileData.Avatar.Ref.Link) - } - if profileData.Banner != nil { - bannerURL = fmt.Sprintf("https://cdn.bsky.app/img/banner/plain/%s/%s@jpeg", did, profileData.Banner.Ref.Link) - } - handle, err := FetchHandle(did) if err != nil { handle = "handle.invalid" } - profile := &general.Profile{ - Handle: handle, - DisplayName: profileData.DisplayName, - AvatarURL: avatarURL, - BannerURL: bannerURL, - Pronouns: profileData.Pronouns, - } + author, err := notes.AuthorFromAppBskyActorProfileRecord(profile, did, handle) - cache.SetProfile(did, profile) - return profile, nil + cache.SetAuthor(did, author) + return author, nil } diff --git a/backend/fetchers/app.bsky.feed.go b/backend/fetchers/app.bsky.feed.go index abc3b46..10c08e7 100644 --- a/backend/fetchers/app.bsky.feed.go +++ b/backend/fetchers/app.bsky.feed.go @@ -10,10 +10,10 @@ import ( func FetchAppBskyFeedPosts(logger *slog.Logger, did, pdsURL, slingshotURL string, cache *Cache) ([]notes.Note, error) { // get author of the note - profile, found := cache.GetProfile(did) + author, found := cache.GetProfile(did) var err error if !found { - profile, err = FetchProfile(logger, did, pdsURL, slingshotURL, cache) + author, err = FetchAppBskyActorProfile(logger, did, pdsURL, slingshotURL, cache) } if err != nil { return nil, err @@ -21,20 +21,20 @@ func FetchAppBskyFeedPosts(logger *slog.Logger, did, pdsURL, slingshotURL string // try slingshot first if given if slingshotURL != "" { - values, err := general.FetchRawRecordCollection(logger, did, "app.bsky.feed.post", slingshotURL) + records, err := general.FetchRawRecordCollection(logger, did, "app.bsky.feed.post", slingshotURL) if err != nil { logger.Error("Fetching from slingshot failed") } else { - return parseAppBskyFeedPostCollection(logger, values, profile, cache) + return parseAppBskyFeedPostCollection(logger, records, author, cache) } } - values, err := general.FetchRawRecordCollection(logger, did, "app.bsky.feed.post", pdsURL) + records, err := general.FetchRawRecordCollection(logger, did, "app.bsky.feed.post", pdsURL) if err != nil { return nil, err } - return parseAppBskyFeedPostCollection(logger, values, profile, cache) + return parseAppBskyFeedPostCollection(logger, records, author, cache) } func FetchAppBskyFeedPostByURI(logger *slog.Logger, uri, slingshotURL string, cache *Cache) (*notes.Note, error) { @@ -52,9 +52,9 @@ func FetchAppBskyFeedPostByURI(logger *slog.Logger, uri, slingshotURL string, ca } // get author of the note - profile, found := cache.GetProfile(repo) + author, found := cache.GetProfile(repo) if !found { - profile, err = FetchProfile(logger, repo, pdsURL, slingshotURL, cache) + author, err = FetchAppBskyActorProfile(logger, repo, pdsURL, slingshotURL, cache) } if err != nil { return nil, err @@ -66,7 +66,7 @@ func FetchAppBskyFeedPostByURI(logger *slog.Logger, uri, slingshotURL string, ca if err != nil { logger.Error("fetching from slingshot failed", "error", err) } else { - return parseAppBskyFeedPostRecord(rawRecord, profile, cache) + return parseAppBskyFeedPostRecord(rawRecord, author, cache) } } @@ -76,10 +76,10 @@ func FetchAppBskyFeedPostByURI(logger *slog.Logger, uri, slingshotURL string, ca return nil, err } - return parseAppBskyFeedPostRecord(rawRecord, profile, cache) + return parseAppBskyFeedPostRecord(rawRecord, author, cache) } -func parseAppBskyFeedPostRecord(rawRecord *general.RawRecord, profile *general.Profile, cache *Cache) (*notes.Note, error) { +func parseAppBskyFeedPostRecord(rawRecord *general.RawRecord, author *notes.Author, cache *Cache) (*notes.Note, error) { if rawRecord == nil { return nil, fmt.Errorf("unable to parse nil record") } @@ -92,7 +92,7 @@ func parseAppBskyFeedPostRecord(rawRecord *general.RawRecord, profile *general.P return nil, err } - note, err := notes.NoteFromAppBskyFeedPostRecord(record, profile) + note, err := notes.NoteFromAppBskyFeedPostRecord(record, author) if err != nil { return nil, err } @@ -103,10 +103,10 @@ func parseAppBskyFeedPostRecord(rawRecord *general.RawRecord, profile *general.P return note, nil } -func parseAppBskyFeedPostCollection(logger *slog.Logger, records []general.RawRecord, profile *general.Profile, cache *Cache) ([]notes.Note, error) { +func parseAppBskyFeedPostCollection(logger *slog.Logger, records []general.RawRecord, author *notes.Author, cache *Cache) ([]notes.Note, error) { posts := make([]notes.Note, 0, len(records)) for _, record := range records { - note, err := parseAppBskyFeedPostRecord(&record, profile, cache) + note, err := parseAppBskyFeedPostRecord(&record, author, cache) if err != nil { logger.Error("failed to parse post record", "error", err) continue diff --git a/backend/fetchers/cache.go b/backend/fetchers/cache.go index b863d60..01c37fe 100644 --- a/backend/fetchers/cache.go +++ b/backend/fetchers/cache.go @@ -1,7 +1,6 @@ package fetchers import ( - "llostre/backend/general" "llostre/backend/notes" "sync" "time" @@ -14,14 +13,14 @@ type CacheEntry struct { type Cache struct { posts map[string]*CacheEntry - profiles map[string]*ProfileCacheEntry + profiles map[string]*AuthorCacheEntry mu sync.RWMutex } func NewCache() *Cache { return &Cache{ posts: make(map[string]*CacheEntry), - profiles: make(map[string]*ProfileCacheEntry), + profiles: make(map[string]*AuthorCacheEntry), } } @@ -77,12 +76,12 @@ func (c *Cache) GetMany(uris []string) map[string]*notes.Note { return result } -type ProfileCacheEntry struct { - Profile *general.Profile +type AuthorCacheEntry struct { + Author *notes.Author ExpiresAt time.Time } -func (c *Cache) GetProfile(did string) (*general.Profile, bool) { +func (c *Cache) GetProfile(did string) (*notes.Author, bool) { c.mu.Lock() defer c.mu.Unlock() @@ -96,15 +95,15 @@ func (c *Cache) GetProfile(did string) (*general.Profile, bool) { return nil, false } - return entry.Profile, true + return entry.Author, true } -func (c *Cache) SetProfile(did string, profile *general.Profile) { +func (c *Cache) SetAuthor(did string, author *notes.Author) { c.mu.Lock() defer c.mu.Unlock() - c.profiles[did] = &ProfileCacheEntry{ - Profile: profile, + c.profiles[did] = &AuthorCacheEntry{ + Author: author, ExpiresAt: time.Now().Add(15 * time.Minute), } } |
