From 85e5c9e6d71a5b82b3118639d5c00e5da2b6e763 Mon Sep 17 00:00:00 2001 From: dusk Date: Sun, 17 Aug 2025 14:26:32 +0300 Subject: [PATCH] appview: state: dedup profile pages Change-Id: lonosovplokkluzqmztkzyumrkznsqwn - rename existing ProfilePage to ProfileHomePage Signed-off-by: dusk --- .jjconflict-base-0/appview/pages/pages.go | 4 +- .jjconflict-base-0/appview/state/profile.go | 216 ++++++++-------- .jjconflict-base-1/appview/pages/pages.go | 4 +- .../appview/pages/templates/timeline.html | 0 .jjconflict-base-1/appview/state/profile.go | 36 +-- .jjconflict-side-0/appview/pages/pages.go | 4 +- .jjconflict-side-0/appview/state/profile.go | 188 +++++++------- .jjconflict-side-1/appview/pages/pages.go | 4 +- .jjconflict-side-1/appview/state/profile.go | 235 ++++++++++-------- .jjconflict-side-2/appview/pages/pages.go | 4 +- .../appview/pages/templates/timeline.html | 0 .jjconflict-side-2/appview/state/profile.go | 55 ++-- 12 files changed, 369 insertions(+), 381 deletions(-) rename {.jjconflict-base-0 => .jjconflict-base-1}/appview/pages/templates/timeline.html (100%) rename {.jjconflict-side-1 => .jjconflict-side-2}/appview/pages/templates/timeline.html (100%) diff --git a/.jjconflict-base-0/appview/pages/pages.go b/.jjconflict-base-0/appview/pages/pages.go index 58b8f0a..08dd79d 100644 --- a/.jjconflict-base-0/appview/pages/pages.go +++ b/.jjconflict-base-0/appview/pages/pages.go @@ -408,7 +408,7 @@ func (p *Pages) ForkRepo(w io.Writer, params ForkRepoParams) error { return p.execute("repo/fork", w, params) } -type ProfilePageParams struct { +type ProfileHomePageParams struct { LoggedInUser *oauth.User Repos []db.Repo CollaboratingRepos []db.Repo @@ -427,7 +427,7 @@ type ProfileCard struct { Profile *db.Profile } -func (p *Pages) ProfilePage(w io.Writer, params ProfilePageParams) error { +func (p *Pages) ProfileHomePage(w io.Writer, params ProfileHomePageParams) error { return p.execute("user/profile", w, params) } diff --git a/.jjconflict-base-0/appview/state/profile.go b/.jjconflict-base-0/appview/state/profile.go index f7f35ae..7e5f582 100644 --- a/.jjconflict-base-0/appview/state/profile.go +++ b/.jjconflict-base-0/appview/state/profile.go @@ -25,7 +25,7 @@ func (s *State) Profile(w http.ResponseWriter, r *http.Request) { tabVal := r.URL.Query().Get("tab") switch tabVal { case "": - s.profilePage(w, r) + s.profileHomePage(w, r) case "repos": s.reposPage(w, r) case "followers": @@ -35,33 +35,74 @@ func (s *State) Profile(w http.ResponseWriter, r *http.Request) { } } -func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { +type ProfilePageParams struct { + Id identity.Identity + LoggedInUser *oauth.User + Card pages.ProfileCard +} + +func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePageParams { didOrHandle := chi.URLParam(r, "user") if didOrHandle == "" { - http.Error(w, "Bad request", http.StatusBadRequest) - return + http.Error(w, "bad request", http.StatusBadRequest) + return nil } ident, ok := r.Context().Value("resolvedId").(identity.Identity) if !ok { - s.pages.Error404(w) - return + log.Printf("malformed middleware") + w.WriteHeader(http.StatusInternalServerError) + return nil } + did := ident.DID.String() - profile, err := db.GetProfile(s.db, ident.DID.String()) + profile, err := db.GetProfile(s.db, did) if err != nil { - log.Printf("getting profile data for %s: %s", ident.DID.String(), err) + log.Printf("getting profile data for %s: %s", did, err) } + followStats, err := db.GetFollowerFollowingCount(s.db, did) + if err != nil { + log.Printf("getting follow stats for %s: %s", did, err) + } + + loggedInUser := s.oauth.GetUser(r) + followStatus := db.IsNotFollowing + if loggedInUser != nil { + followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did) + } + + return &ProfilePageParams{ + Id: ident, + LoggedInUser: loggedInUser, + Card: pages.ProfileCard{ + UserDid: did, + UserHandle: ident.Handle.String(), + Profile: profile, + FollowStatus: followStatus, + FollowersCount: followStats.Followers, + FollowingCount: followStats.Following, + }, + } +} + +func (s *State) profileHomePage(w http.ResponseWriter, r *http.Request) { + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { + return + } + + id := pageWithProfile.Id repos, err := db.GetRepos( s.db, 0, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), ) if err != nil { - log.Printf("getting repos for %s: %s", ident.DID.String(), err) + log.Printf("getting repos for %s: %s", id.DID, err) } + profile := pageWithProfile.Card.Profile // filter out ones that are pinned pinnedRepos := []db.Repo{} for i, r := range repos { @@ -76,9 +117,9 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { } } - collaboratingRepos, err := db.CollaboratingIn(s.db, ident.DID.String()) + collaboratingRepos, err := db.CollaboratingIn(s.db, id.DID.String()) if err != nil { - log.Printf("getting collaborating repos for %s: %s", ident.DID.String(), err) + log.Printf("getting collaborating repos for %s: %s", id.DID, err) } pinnedCollaboratingRepos := []db.Repo{} @@ -89,94 +130,72 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { } } - timeline, err := db.MakeProfileTimeline(s.db, ident.DID.String()) + timeline, err := db.MakeProfileTimeline(s.db, id.DID.String()) if err != nil { - log.Printf("failed to create profile timeline for %s: %s", ident.DID.String(), err) + log.Printf("failed to create profile timeline for %s: %s", id.DID, err) } - followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err) + var didsToResolve []string + for _, r := range collaboratingRepos { + didsToResolve = append(didsToResolve, r.Did) } - - loggedInUser := s.oauth.GetUser(r) - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String()) + for _, byMonth := range timeline.ByMonth { + for _, pe := range byMonth.PullEvents.Items { + didsToResolve = append(didsToResolve, pe.Repo.Did) + } + for _, ie := range byMonth.IssueEvents.Items { + didsToResolve = append(didsToResolve, ie.Metadata.Repo.Did) + } + for _, re := range byMonth.RepoEvents { + didsToResolve = append(didsToResolve, re.Repo.Did) + if re.Source != nil { + didsToResolve = append(didsToResolve, re.Source.Did) + } + } } now := time.Now() startOfYear := time.Date(now.Year(), 1, 1, 0, 0, 0, 0, time.UTC) punchcard, err := db.MakePunchcard( s.db, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), db.FilterGte("date", startOfYear.Format(time.DateOnly)), db.FilterLte("date", now.Format(time.DateOnly)), ) if err != nil { - log.Println("failed to get punchcard for did", "did", ident.DID.String(), "err", err) + log.Println("failed to get punchcard for did", "did", id.DID, "err", err) } - s.pages.ProfilePage(w, pages.ProfilePageParams{ - LoggedInUser: loggedInUser, + s.pages.ProfileHomePage(w, pages.ProfileHomePageParams{ + LoggedInUser: pageWithProfile.LoggedInUser, Repos: pinnedRepos, CollaboratingRepos: pinnedCollaboratingRepos, - Card: pages.ProfileCard{ - UserDid: ident.DID.String(), - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followers, - FollowingCount: following, - }, - Punchcard: punchcard, - ProfileTimeline: timeline, + Card: pageWithProfile.Card, + Punchcard: punchcard, + ProfileTimeline: timeline, }) } func (s *State) reposPage(w http.ResponseWriter, r *http.Request) { - ident, ok := r.Context().Value("resolvedId").(identity.Identity) - if !ok { - s.pages.Error404(w) + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { return } - profile, err := db.GetProfile(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting profile data for %s: %s", ident.DID.String(), err) - } - + id := pageWithProfile.Id repos, err := db.GetRepos( s.db, 0, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), ) if err != nil { - log.Printf("getting repos for %s: %s", ident.DID.String(), err) - } - - loggedInUser := s.oauth.GetUser(r) - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String()) - } - - followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err) + log.Printf("getting repos for %s: %s", id.DID, err) } s.pages.ReposPage(w, pages.ReposPageParams{ - LoggedInUser: loggedInUser, + LoggedInUser: pageWithProfile.LoggedInUser, Repos: repos, - Card: pages.ProfileCard{ - UserDid: ident.DID.String(), - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followers, - FollowingCount: following, - }, + Card: pageWithProfile.Card, }) } @@ -187,27 +206,25 @@ type FollowsPageParams struct { } func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func(db.Execer, string) ([]db.Follow, error), extractDid func(db.Follow) string) *FollowsPageParams { - ident, ok := r.Context().Value("resolvedId").(identity.Identity) - if !ok { - s.pages.Error404(w) + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { return nil } - did := ident.DID.String() - profile, err := db.GetProfile(s.db, did) - if err != nil { - log.Printf("getting profile data for %s: %s", did, err) - } + id := pageWithProfile.Id + loggedInUser := pageWithProfile.LoggedInUser - loggedInUser := s.oauth.GetUser(r) - - follows, err := fetchFollows(s.db, did) + follows, err := fetchFollows(s.db, id.DID.String()) if err != nil { - log.Printf("getting followers for %s: %s", did, err) + log.Printf("getting followers for %s: %s", id.DID, err) } if len(follows) == 0 { - return nil + return &FollowsPageParams{ + LoggedInUser: loggedInUser, + Follows: []pages.FollowCard{}, + Card: pageWithProfile.Card, + } } followDids := make([]string, 0, len(follows)) @@ -218,7 +235,11 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows profiles, err := db.GetProfiles(s.db, db.FilterIn("did", followDids)) if err != nil { log.Printf("getting profile for %s: %s", followDids, err) - return nil + } + + followStatsMap, err := db.GetFollowerFollowingCounts(s.db, followDids) + if err != nil { + log.Printf("getting follow counts for %s: %s", followDids, err) } var loggedInUserFollowing map[string]struct{} @@ -237,9 +258,9 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards := make([]pages.FollowCard, 0, len(follows)) for _, did := range followDids { - followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) - if err != nil { - log.Printf("getting follow stats for %s: %s", did, err) + followStats, exists := followStatsMap[did] + if !exists { + followStats = db.FollowStats{} } followStatus := db.IsNotFollowing if loggedInUserFollowing != nil { @@ -259,38 +280,24 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards = append(followCards, pages.FollowCard{ UserDid: did, FollowStatus: followStatus, - FollowersCount: followersCount, - FollowingCount: followingCount, + FollowersCount: followStats.Followers, + FollowingCount: followStats.Following, Profile: profile, }) } - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did) - } - - followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) - if err != nil { - log.Printf("getting follow stats followers for %s: %s", did, err) - } - return &FollowsPageParams{ LoggedInUser: loggedInUser, Follows: followCards, - Card: pages.ProfileCard{ - UserDid: did, - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followersCount, - FollowingCount: followingCount, - }, + Card: pageWithProfile.Card, } } func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { followPage := s.followPage(w, r, db.GetFollowers, func(f db.Follow) string { return f.UserDid }) + if followPage == nil { + return + } s.pages.FollowersPage(w, pages.FollowersPageParams{ LoggedInUser: followPage.LoggedInUser, @@ -301,6 +308,9 @@ func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { func (s *State) followingPage(w http.ResponseWriter, r *http.Request) { followPage := s.followPage(w, r, db.GetFollowing, func(f db.Follow) string { return f.SubjectDid }) + if followPage == nil { + return + } s.pages.FollowingPage(w, pages.FollowingPageParams{ LoggedInUser: followPage.LoggedInUser, diff --git a/.jjconflict-base-1/appview/pages/pages.go b/.jjconflict-base-1/appview/pages/pages.go index 58b8f0a..08dd79d 100644 --- a/.jjconflict-base-1/appview/pages/pages.go +++ b/.jjconflict-base-1/appview/pages/pages.go @@ -408,7 +408,7 @@ func (p *Pages) ForkRepo(w io.Writer, params ForkRepoParams) error { return p.execute("repo/fork", w, params) } -type ProfilePageParams struct { +type ProfileHomePageParams struct { LoggedInUser *oauth.User Repos []db.Repo CollaboratingRepos []db.Repo @@ -427,7 +427,7 @@ type ProfileCard struct { Profile *db.Profile } -func (p *Pages) ProfilePage(w io.Writer, params ProfilePageParams) error { +func (p *Pages) ProfileHomePage(w io.Writer, params ProfileHomePageParams) error { return p.execute("user/profile", w, params) } diff --git a/.jjconflict-base-0/appview/pages/templates/timeline.html b/.jjconflict-base-1/appview/pages/templates/timeline.html similarity index 100% rename from .jjconflict-base-0/appview/pages/templates/timeline.html rename to .jjconflict-base-1/appview/pages/templates/timeline.html diff --git a/.jjconflict-base-1/appview/state/profile.go b/.jjconflict-base-1/appview/state/profile.go index 7e5f582..ea753b2 100644 --- a/.jjconflict-base-1/appview/state/profile.go +++ b/.jjconflict-base-1/appview/state/profile.go @@ -61,7 +61,7 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePage log.Printf("getting profile data for %s: %s", did, err) } - followStats, err := db.GetFollowerFollowingCount(s.db, did) + followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) if err != nil { log.Printf("getting follow stats for %s: %s", did, err) } @@ -80,8 +80,8 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePage UserHandle: ident.Handle.String(), Profile: profile, FollowStatus: followStatus, - FollowersCount: followStats.Followers, - FollowingCount: followStats.Following, + FollowersCount: followersCount, + FollowingCount: followingCount, }, } } @@ -212,7 +212,6 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows } id := pageWithProfile.Id - loggedInUser := pageWithProfile.LoggedInUser follows, err := fetchFollows(s.db, id.DID.String()) if err != nil { @@ -220,11 +219,7 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows } if len(follows) == 0 { - return &FollowsPageParams{ - LoggedInUser: loggedInUser, - Follows: []pages.FollowCard{}, - Card: pageWithProfile.Card, - } + return nil } followDids := make([]string, 0, len(follows)) @@ -235,13 +230,10 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows profiles, err := db.GetProfiles(s.db, db.FilterIn("did", followDids)) if err != nil { log.Printf("getting profile for %s: %s", followDids, err) + return nil } - followStatsMap, err := db.GetFollowerFollowingCounts(s.db, followDids) - if err != nil { - log.Printf("getting follow counts for %s: %s", followDids, err) - } - + loggedInUser := pageWithProfile.LoggedInUser var loggedInUserFollowing map[string]struct{} if loggedInUser != nil { following, err := db.GetFollowing(s.db, loggedInUser.Did) @@ -258,9 +250,9 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards := make([]pages.FollowCard, 0, len(follows)) for _, did := range followDids { - followStats, exists := followStatsMap[did] - if !exists { - followStats = db.FollowStats{} + followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) + if err != nil { + log.Printf("getting follow stats for %s: %s", did, err) } followStatus := db.IsNotFollowing if loggedInUserFollowing != nil { @@ -280,8 +272,8 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards = append(followCards, pages.FollowCard{ UserDid: did, FollowStatus: followStatus, - FollowersCount: followStats.Followers, - FollowingCount: followStats.Following, + FollowersCount: followersCount, + FollowingCount: followingCount, Profile: profile, }) } @@ -295,9 +287,6 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { followPage := s.followPage(w, r, db.GetFollowers, func(f db.Follow) string { return f.UserDid }) - if followPage == nil { - return - } s.pages.FollowersPage(w, pages.FollowersPageParams{ LoggedInUser: followPage.LoggedInUser, @@ -308,9 +297,6 @@ func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { func (s *State) followingPage(w http.ResponseWriter, r *http.Request) { followPage := s.followPage(w, r, db.GetFollowing, func(f db.Follow) string { return f.SubjectDid }) - if followPage == nil { - return - } s.pages.FollowingPage(w, pages.FollowingPageParams{ LoggedInUser: followPage.LoggedInUser, diff --git a/.jjconflict-side-0/appview/pages/pages.go b/.jjconflict-side-0/appview/pages/pages.go index 58b8f0a..08dd79d 100644 --- a/.jjconflict-side-0/appview/pages/pages.go +++ b/.jjconflict-side-0/appview/pages/pages.go @@ -408,7 +408,7 @@ func (p *Pages) ForkRepo(w io.Writer, params ForkRepoParams) error { return p.execute("repo/fork", w, params) } -type ProfilePageParams struct { +type ProfileHomePageParams struct { LoggedInUser *oauth.User Repos []db.Repo CollaboratingRepos []db.Repo @@ -427,7 +427,7 @@ type ProfileCard struct { Profile *db.Profile } -func (p *Pages) ProfilePage(w io.Writer, params ProfilePageParams) error { +func (p *Pages) ProfileHomePage(w io.Writer, params ProfileHomePageParams) error { return p.execute("user/profile", w, params) } diff --git a/.jjconflict-side-0/appview/state/profile.go b/.jjconflict-side-0/appview/state/profile.go index f7f35ae..ea753b2 100644 --- a/.jjconflict-side-0/appview/state/profile.go +++ b/.jjconflict-side-0/appview/state/profile.go @@ -25,7 +25,7 @@ func (s *State) Profile(w http.ResponseWriter, r *http.Request) { tabVal := r.URL.Query().Get("tab") switch tabVal { case "": - s.profilePage(w, r) + s.profileHomePage(w, r) case "repos": s.reposPage(w, r) case "followers": @@ -35,33 +35,74 @@ func (s *State) Profile(w http.ResponseWriter, r *http.Request) { } } -func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { +type ProfilePageParams struct { + Id identity.Identity + LoggedInUser *oauth.User + Card pages.ProfileCard +} + +func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePageParams { didOrHandle := chi.URLParam(r, "user") if didOrHandle == "" { - http.Error(w, "Bad request", http.StatusBadRequest) - return + http.Error(w, "bad request", http.StatusBadRequest) + return nil } ident, ok := r.Context().Value("resolvedId").(identity.Identity) if !ok { - s.pages.Error404(w) - return + log.Printf("malformed middleware") + w.WriteHeader(http.StatusInternalServerError) + return nil + } + did := ident.DID.String() + + profile, err := db.GetProfile(s.db, did) + if err != nil { + log.Printf("getting profile data for %s: %s", did, err) } - profile, err := db.GetProfile(s.db, ident.DID.String()) + followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) if err != nil { - log.Printf("getting profile data for %s: %s", ident.DID.String(), err) + log.Printf("getting follow stats for %s: %s", did, err) } + loggedInUser := s.oauth.GetUser(r) + followStatus := db.IsNotFollowing + if loggedInUser != nil { + followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did) + } + + return &ProfilePageParams{ + Id: ident, + LoggedInUser: loggedInUser, + Card: pages.ProfileCard{ + UserDid: did, + UserHandle: ident.Handle.String(), + Profile: profile, + FollowStatus: followStatus, + FollowersCount: followersCount, + FollowingCount: followingCount, + }, + } +} + +func (s *State) profileHomePage(w http.ResponseWriter, r *http.Request) { + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { + return + } + + id := pageWithProfile.Id repos, err := db.GetRepos( s.db, 0, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), ) if err != nil { - log.Printf("getting repos for %s: %s", ident.DID.String(), err) + log.Printf("getting repos for %s: %s", id.DID, err) } + profile := pageWithProfile.Card.Profile // filter out ones that are pinned pinnedRepos := []db.Repo{} for i, r := range repos { @@ -76,9 +117,9 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { } } - collaboratingRepos, err := db.CollaboratingIn(s.db, ident.DID.String()) + collaboratingRepos, err := db.CollaboratingIn(s.db, id.DID.String()) if err != nil { - log.Printf("getting collaborating repos for %s: %s", ident.DID.String(), err) + log.Printf("getting collaborating repos for %s: %s", id.DID, err) } pinnedCollaboratingRepos := []db.Repo{} @@ -89,94 +130,72 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { } } - timeline, err := db.MakeProfileTimeline(s.db, ident.DID.String()) + timeline, err := db.MakeProfileTimeline(s.db, id.DID.String()) if err != nil { - log.Printf("failed to create profile timeline for %s: %s", ident.DID.String(), err) + log.Printf("failed to create profile timeline for %s: %s", id.DID, err) } - followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err) + var didsToResolve []string + for _, r := range collaboratingRepos { + didsToResolve = append(didsToResolve, r.Did) } - - loggedInUser := s.oauth.GetUser(r) - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String()) + for _, byMonth := range timeline.ByMonth { + for _, pe := range byMonth.PullEvents.Items { + didsToResolve = append(didsToResolve, pe.Repo.Did) + } + for _, ie := range byMonth.IssueEvents.Items { + didsToResolve = append(didsToResolve, ie.Metadata.Repo.Did) + } + for _, re := range byMonth.RepoEvents { + didsToResolve = append(didsToResolve, re.Repo.Did) + if re.Source != nil { + didsToResolve = append(didsToResolve, re.Source.Did) + } + } } now := time.Now() startOfYear := time.Date(now.Year(), 1, 1, 0, 0, 0, 0, time.UTC) punchcard, err := db.MakePunchcard( s.db, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), db.FilterGte("date", startOfYear.Format(time.DateOnly)), db.FilterLte("date", now.Format(time.DateOnly)), ) if err != nil { - log.Println("failed to get punchcard for did", "did", ident.DID.String(), "err", err) + log.Println("failed to get punchcard for did", "did", id.DID, "err", err) } - s.pages.ProfilePage(w, pages.ProfilePageParams{ - LoggedInUser: loggedInUser, + s.pages.ProfileHomePage(w, pages.ProfileHomePageParams{ + LoggedInUser: pageWithProfile.LoggedInUser, Repos: pinnedRepos, CollaboratingRepos: pinnedCollaboratingRepos, - Card: pages.ProfileCard{ - UserDid: ident.DID.String(), - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followers, - FollowingCount: following, - }, - Punchcard: punchcard, - ProfileTimeline: timeline, + Card: pageWithProfile.Card, + Punchcard: punchcard, + ProfileTimeline: timeline, }) } func (s *State) reposPage(w http.ResponseWriter, r *http.Request) { - ident, ok := r.Context().Value("resolvedId").(identity.Identity) - if !ok { - s.pages.Error404(w) + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { return } - profile, err := db.GetProfile(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting profile data for %s: %s", ident.DID.String(), err) - } - + id := pageWithProfile.Id repos, err := db.GetRepos( s.db, 0, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), ) if err != nil { - log.Printf("getting repos for %s: %s", ident.DID.String(), err) - } - - loggedInUser := s.oauth.GetUser(r) - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String()) - } - - followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err) + log.Printf("getting repos for %s: %s", id.DID, err) } s.pages.ReposPage(w, pages.ReposPageParams{ - LoggedInUser: loggedInUser, + LoggedInUser: pageWithProfile.LoggedInUser, Repos: repos, - Card: pages.ProfileCard{ - UserDid: ident.DID.String(), - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followers, - FollowingCount: following, - }, + Card: pageWithProfile.Card, }) } @@ -187,23 +206,16 @@ type FollowsPageParams struct { } func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func(db.Execer, string) ([]db.Follow, error), extractDid func(db.Follow) string) *FollowsPageParams { - ident, ok := r.Context().Value("resolvedId").(identity.Identity) - if !ok { - s.pages.Error404(w) + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { return nil } - did := ident.DID.String() - profile, err := db.GetProfile(s.db, did) - if err != nil { - log.Printf("getting profile data for %s: %s", did, err) - } + id := pageWithProfile.Id - loggedInUser := s.oauth.GetUser(r) - - follows, err := fetchFollows(s.db, did) + follows, err := fetchFollows(s.db, id.DID.String()) if err != nil { - log.Printf("getting followers for %s: %s", did, err) + log.Printf("getting followers for %s: %s", id.DID, err) } if len(follows) == 0 { @@ -221,6 +233,7 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows return nil } + loggedInUser := pageWithProfile.LoggedInUser var loggedInUserFollowing map[string]struct{} if loggedInUser != nil { following, err := db.GetFollowing(s.db, loggedInUser.Did) @@ -265,27 +278,10 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows }) } - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did) - } - - followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) - if err != nil { - log.Printf("getting follow stats followers for %s: %s", did, err) - } - return &FollowsPageParams{ LoggedInUser: loggedInUser, Follows: followCards, - Card: pages.ProfileCard{ - UserDid: did, - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followersCount, - FollowingCount: followingCount, - }, + Card: pageWithProfile.Card, } } diff --git a/.jjconflict-side-1/appview/pages/pages.go b/.jjconflict-side-1/appview/pages/pages.go index 58b8f0a..08dd79d 100644 --- a/.jjconflict-side-1/appview/pages/pages.go +++ b/.jjconflict-side-1/appview/pages/pages.go @@ -408,7 +408,7 @@ func (p *Pages) ForkRepo(w io.Writer, params ForkRepoParams) error { return p.execute("repo/fork", w, params) } -type ProfilePageParams struct { +type ProfileHomePageParams struct { LoggedInUser *oauth.User Repos []db.Repo CollaboratingRepos []db.Repo @@ -427,7 +427,7 @@ type ProfileCard struct { Profile *db.Profile } -func (p *Pages) ProfilePage(w io.Writer, params ProfilePageParams) error { +func (p *Pages) ProfileHomePage(w io.Writer, params ProfileHomePageParams) error { return p.execute("user/profile", w, params) } diff --git a/.jjconflict-side-1/appview/state/profile.go b/.jjconflict-side-1/appview/state/profile.go index f7f35ae..b148262 100644 --- a/.jjconflict-side-1/appview/state/profile.go +++ b/.jjconflict-side-1/appview/state/profile.go @@ -25,7 +25,7 @@ func (s *State) Profile(w http.ResponseWriter, r *http.Request) { tabVal := r.URL.Query().Get("tab") switch tabVal { case "": - s.profilePage(w, r) + s.profileHomePage(w, r) case "repos": s.reposPage(w, r) case "followers": @@ -35,33 +35,74 @@ func (s *State) Profile(w http.ResponseWriter, r *http.Request) { } } -func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { +type ProfilePageParams struct { + Id identity.Identity + LoggedInUser *oauth.User + Card pages.ProfileCard +} + +func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePageParams { didOrHandle := chi.URLParam(r, "user") if didOrHandle == "" { - http.Error(w, "Bad request", http.StatusBadRequest) - return + http.Error(w, "bad request", http.StatusBadRequest) + return nil } ident, ok := r.Context().Value("resolvedId").(identity.Identity) if !ok { - s.pages.Error404(w) - return + log.Printf("malformed middleware") + w.WriteHeader(http.StatusInternalServerError) + return nil + } + did := ident.DID.String() + + profile, err := db.GetProfile(s.db, did) + if err != nil { + log.Printf("getting profile data for %s: %s", did, err) } - profile, err := db.GetProfile(s.db, ident.DID.String()) + followStats, err := db.GetFollowerFollowingCount(s.db, did) if err != nil { - log.Printf("getting profile data for %s: %s", ident.DID.String(), err) + log.Printf("getting follow stats for %s: %s", did, err) + } + + loggedInUser := s.oauth.GetUser(r) + followStatus := db.IsNotFollowing + if loggedInUser != nil { + followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did) } + return &ProfilePageParams{ + Id: ident, + LoggedInUser: loggedInUser, + Card: pages.ProfileCard{ + UserDid: did, + UserHandle: ident.Handle.String(), + Profile: profile, + FollowStatus: followStatus, + FollowersCount: followStats.Followers, + FollowingCount: followStats.Following, + }, + } +} + +func (s *State) profileHomePage(w http.ResponseWriter, r *http.Request) { + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { + return + } + + id := pageWithProfile.Id repos, err := db.GetRepos( s.db, 0, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), ) if err != nil { - log.Printf("getting repos for %s: %s", ident.DID.String(), err) + log.Printf("getting repos for %s: %s", id.DID, err) } + profile := pageWithProfile.Card.Profile // filter out ones that are pinned pinnedRepos := []db.Repo{} for i, r := range repos { @@ -76,9 +117,9 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { } } - collaboratingRepos, err := db.CollaboratingIn(s.db, ident.DID.String()) + collaboratingRepos, err := db.CollaboratingIn(s.db, id.DID.String()) if err != nil { - log.Printf("getting collaborating repos for %s: %s", ident.DID.String(), err) + log.Printf("getting collaborating repos for %s: %s", id.DID, err) } pinnedCollaboratingRepos := []db.Repo{} @@ -89,94 +130,72 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) { } } - timeline, err := db.MakeProfileTimeline(s.db, ident.DID.String()) + timeline, err := db.MakeProfileTimeline(s.db, id.DID.String()) if err != nil { - log.Printf("failed to create profile timeline for %s: %s", ident.DID.String(), err) + log.Printf("failed to create profile timeline for %s: %s", id.DID, err) } - followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err) + var didsToResolve []string + for _, r := range collaboratingRepos { + didsToResolve = append(didsToResolve, r.Did) } - - loggedInUser := s.oauth.GetUser(r) - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String()) + for _, byMonth := range timeline.ByMonth { + for _, pe := range byMonth.PullEvents.Items { + didsToResolve = append(didsToResolve, pe.Repo.Did) + } + for _, ie := range byMonth.IssueEvents.Items { + didsToResolve = append(didsToResolve, ie.Metadata.Repo.Did) + } + for _, re := range byMonth.RepoEvents { + didsToResolve = append(didsToResolve, re.Repo.Did) + if re.Source != nil { + didsToResolve = append(didsToResolve, re.Source.Did) + } + } } now := time.Now() startOfYear := time.Date(now.Year(), 1, 1, 0, 0, 0, 0, time.UTC) punchcard, err := db.MakePunchcard( s.db, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), db.FilterGte("date", startOfYear.Format(time.DateOnly)), db.FilterLte("date", now.Format(time.DateOnly)), ) if err != nil { - log.Println("failed to get punchcard for did", "did", ident.DID.String(), "err", err) + log.Println("failed to get punchcard for did", "did", id.DID, "err", err) } - s.pages.ProfilePage(w, pages.ProfilePageParams{ - LoggedInUser: loggedInUser, + s.pages.ProfileHomePage(w, pages.ProfileHomePageParams{ + LoggedInUser: pageWithProfile.LoggedInUser, Repos: pinnedRepos, CollaboratingRepos: pinnedCollaboratingRepos, - Card: pages.ProfileCard{ - UserDid: ident.DID.String(), - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followers, - FollowingCount: following, - }, - Punchcard: punchcard, - ProfileTimeline: timeline, + Card: pageWithProfile.Card, + Punchcard: punchcard, + ProfileTimeline: timeline, }) } func (s *State) reposPage(w http.ResponseWriter, r *http.Request) { - ident, ok := r.Context().Value("resolvedId").(identity.Identity) - if !ok { - s.pages.Error404(w) + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { return } - profile, err := db.GetProfile(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting profile data for %s: %s", ident.DID.String(), err) - } - + id := pageWithProfile.Id repos, err := db.GetRepos( s.db, 0, - db.FilterEq("did", ident.DID.String()), + db.FilterEq("did", id.DID), ) if err != nil { - log.Printf("getting repos for %s: %s", ident.DID.String(), err) - } - - loggedInUser := s.oauth.GetUser(r) - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, ident.DID.String()) - } - - followers, following, err := db.GetFollowerFollowingCount(s.db, ident.DID.String()) - if err != nil { - log.Printf("getting follow stats repos for %s: %s", ident.DID.String(), err) + log.Printf("getting repos for %s: %s", id.DID, err) } s.pages.ReposPage(w, pages.ReposPageParams{ - LoggedInUser: loggedInUser, + LoggedInUser: pageWithProfile.LoggedInUser, Repos: repos, - Card: pages.ProfileCard{ - UserDid: ident.DID.String(), - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followers, - FollowingCount: following, - }, + Card: pageWithProfile.Card, }) } @@ -186,28 +205,27 @@ type FollowsPageParams struct { Card pages.ProfileCard } -func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func(db.Execer, string) ([]db.Follow, error), extractDid func(db.Follow) string) *FollowsPageParams { - ident, ok := r.Context().Value("resolvedId").(identity.Identity) - if !ok { - s.pages.Error404(w) - return nil - } - did := ident.DID.String() - - profile, err := db.GetProfile(s.db, did) - if err != nil { - log.Printf("getting profile data for %s: %s", did, err) +func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func(db.Execer, string) ([]db.Follow, error), extractDid func(db.Follow) string) (FollowsPageParams, error) { + pageWithProfile := s.profilePage(w, r) + if pageWithProfile == nil { + return FollowsPageParams{}, nil } - loggedInUser := s.oauth.GetUser(r) + id := pageWithProfile.Id + loggedInUser := pageWithProfile.LoggedInUser - follows, err := fetchFollows(s.db, did) + follows, err := fetchFollows(s.db, id.DID.String()) if err != nil { - log.Printf("getting followers for %s: %s", did, err) + log.Printf("getting followers for %s: %s", id.DID, err) + return FollowsPageParams{}, err } if len(follows) == 0 { - return nil + return FollowsPageParams{ + LoggedInUser: loggedInUser, + Follows: []pages.FollowCard{}, + Card: pageWithProfile.Card, + }, nil } followDids := make([]string, 0, len(follows)) @@ -218,14 +236,20 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows profiles, err := db.GetProfiles(s.db, db.FilterIn("did", followDids)) if err != nil { log.Printf("getting profile for %s: %s", followDids, err) - return nil + return FollowsPageParams{}, err + } + + followStatsMap, err := db.GetFollowerFollowingCounts(s.db, followDids) + if err != nil { + log.Printf("getting follow counts for %s: %s", followDids, err) + return FollowsPageParams{}, err } var loggedInUserFollowing map[string]struct{} if loggedInUser != nil { following, err := db.GetFollowing(s.db, loggedInUser.Did) if err != nil { - return nil + return FollowsPageParams{}, err } if len(following) > 0 { loggedInUserFollowing = make(map[string]struct{}, len(following)) @@ -237,9 +261,9 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards := make([]pages.FollowCard, 0, len(follows)) for _, did := range followDids { - followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) - if err != nil { - log.Printf("getting follow stats for %s: %s", did, err) + followStats, exists := followStatsMap[did] + if !exists { + followStats = db.FollowStats{} } followStatus := db.IsNotFollowing if loggedInUserFollowing != nil { @@ -259,38 +283,25 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards = append(followCards, pages.FollowCard{ UserDid: did, FollowStatus: followStatus, - FollowersCount: followersCount, - FollowingCount: followingCount, + FollowersCount: followStats.Followers, + FollowingCount: followStats.Following, Profile: profile, }) } - followStatus := db.IsNotFollowing - if loggedInUser != nil { - followStatus = db.GetFollowStatus(s.db, loggedInUser.Did, did) - } - - followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) - if err != nil { - log.Printf("getting follow stats followers for %s: %s", did, err) - } - - return &FollowsPageParams{ + return FollowsPageParams{ LoggedInUser: loggedInUser, Follows: followCards, - Card: pages.ProfileCard{ - UserDid: did, - UserHandle: ident.Handle.String(), - Profile: profile, - FollowStatus: followStatus, - FollowersCount: followersCount, - FollowingCount: followingCount, - }, - } + Card: pageWithProfile.Card, + }, nil } func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { - followPage := s.followPage(w, r, db.GetFollowers, func(f db.Follow) string { return f.UserDid }) + followPage, err := s.followPage(w, r, db.GetFollowers, func(f db.Follow) string { return f.UserDid }) + if err != nil { + s.pages.Notice(w, "all-followers", "Failed to load followers") + return + } s.pages.FollowersPage(w, pages.FollowersPageParams{ LoggedInUser: followPage.LoggedInUser, @@ -300,7 +311,11 @@ func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { } func (s *State) followingPage(w http.ResponseWriter, r *http.Request) { - followPage := s.followPage(w, r, db.GetFollowing, func(f db.Follow) string { return f.SubjectDid }) + followPage, err := s.followPage(w, r, db.GetFollowing, func(f db.Follow) string { return f.SubjectDid }) + if err != nil { + s.pages.Notice(w, "all-following", "Failed to load following") + return + } s.pages.FollowingPage(w, pages.FollowingPageParams{ LoggedInUser: followPage.LoggedInUser, diff --git a/.jjconflict-side-2/appview/pages/pages.go b/.jjconflict-side-2/appview/pages/pages.go index 58b8f0a..08dd79d 100644 --- a/.jjconflict-side-2/appview/pages/pages.go +++ b/.jjconflict-side-2/appview/pages/pages.go @@ -408,7 +408,7 @@ func (p *Pages) ForkRepo(w io.Writer, params ForkRepoParams) error { return p.execute("repo/fork", w, params) } -type ProfilePageParams struct { +type ProfileHomePageParams struct { LoggedInUser *oauth.User Repos []db.Repo CollaboratingRepos []db.Repo @@ -427,7 +427,7 @@ type ProfileCard struct { Profile *db.Profile } -func (p *Pages) ProfilePage(w io.Writer, params ProfilePageParams) error { +func (p *Pages) ProfileHomePage(w io.Writer, params ProfileHomePageParams) error { return p.execute("user/profile", w, params) } diff --git a/.jjconflict-side-1/appview/pages/templates/timeline.html b/.jjconflict-side-2/appview/pages/templates/timeline.html similarity index 100% rename from .jjconflict-side-1/appview/pages/templates/timeline.html rename to .jjconflict-side-2/appview/pages/templates/timeline.html diff --git a/.jjconflict-side-2/appview/state/profile.go b/.jjconflict-side-2/appview/state/profile.go index b148262..ea753b2 100644 --- a/.jjconflict-side-2/appview/state/profile.go +++ b/.jjconflict-side-2/appview/state/profile.go @@ -61,7 +61,7 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePage log.Printf("getting profile data for %s: %s", did, err) } - followStats, err := db.GetFollowerFollowingCount(s.db, did) + followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) if err != nil { log.Printf("getting follow stats for %s: %s", did, err) } @@ -80,8 +80,8 @@ func (s *State) profilePage(w http.ResponseWriter, r *http.Request) *ProfilePage UserHandle: ident.Handle.String(), Profile: profile, FollowStatus: followStatus, - FollowersCount: followStats.Followers, - FollowingCount: followStats.Following, + FollowersCount: followersCount, + FollowingCount: followingCount, }, } } @@ -205,27 +205,21 @@ type FollowsPageParams struct { Card pages.ProfileCard } -func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func(db.Execer, string) ([]db.Follow, error), extractDid func(db.Follow) string) (FollowsPageParams, error) { +func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows func(db.Execer, string) ([]db.Follow, error), extractDid func(db.Follow) string) *FollowsPageParams { pageWithProfile := s.profilePage(w, r) if pageWithProfile == nil { - return FollowsPageParams{}, nil + return nil } id := pageWithProfile.Id - loggedInUser := pageWithProfile.LoggedInUser follows, err := fetchFollows(s.db, id.DID.String()) if err != nil { log.Printf("getting followers for %s: %s", id.DID, err) - return FollowsPageParams{}, err } if len(follows) == 0 { - return FollowsPageParams{ - LoggedInUser: loggedInUser, - Follows: []pages.FollowCard{}, - Card: pageWithProfile.Card, - }, nil + return nil } followDids := make([]string, 0, len(follows)) @@ -236,20 +230,15 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows profiles, err := db.GetProfiles(s.db, db.FilterIn("did", followDids)) if err != nil { log.Printf("getting profile for %s: %s", followDids, err) - return FollowsPageParams{}, err - } - - followStatsMap, err := db.GetFollowerFollowingCounts(s.db, followDids) - if err != nil { - log.Printf("getting follow counts for %s: %s", followDids, err) - return FollowsPageParams{}, err + return nil } + loggedInUser := pageWithProfile.LoggedInUser var loggedInUserFollowing map[string]struct{} if loggedInUser != nil { following, err := db.GetFollowing(s.db, loggedInUser.Did) if err != nil { - return FollowsPageParams{}, err + return nil } if len(following) > 0 { loggedInUserFollowing = make(map[string]struct{}, len(following)) @@ -261,9 +250,9 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards := make([]pages.FollowCard, 0, len(follows)) for _, did := range followDids { - followStats, exists := followStatsMap[did] - if !exists { - followStats = db.FollowStats{} + followersCount, followingCount, err := db.GetFollowerFollowingCount(s.db, did) + if err != nil { + log.Printf("getting follow stats for %s: %s", did, err) } followStatus := db.IsNotFollowing if loggedInUserFollowing != nil { @@ -283,25 +272,21 @@ func (s *State) followPage(w http.ResponseWriter, r *http.Request, fetchFollows followCards = append(followCards, pages.FollowCard{ UserDid: did, FollowStatus: followStatus, - FollowersCount: followStats.Followers, - FollowingCount: followStats.Following, + FollowersCount: followersCount, + FollowingCount: followingCount, Profile: profile, }) } - return FollowsPageParams{ + return &FollowsPageParams{ LoggedInUser: loggedInUser, Follows: followCards, Card: pageWithProfile.Card, - }, nil + } } func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { - followPage, err := s.followPage(w, r, db.GetFollowers, func(f db.Follow) string { return f.UserDid }) - if err != nil { - s.pages.Notice(w, "all-followers", "Failed to load followers") - return - } + followPage := s.followPage(w, r, db.GetFollowers, func(f db.Follow) string { return f.UserDid }) s.pages.FollowersPage(w, pages.FollowersPageParams{ LoggedInUser: followPage.LoggedInUser, @@ -311,11 +296,7 @@ func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { } func (s *State) followingPage(w http.ResponseWriter, r *http.Request) { - followPage, err := s.followPage(w, r, db.GetFollowing, func(f db.Follow) string { return f.SubjectDid }) - if err != nil { - s.pages.Notice(w, "all-following", "Failed to load following") - return - } + followPage := s.followPage(w, r, db.GetFollowing, func(f db.Follow) string { return f.SubjectDid }) s.pages.FollowingPage(w, pages.FollowingPageParams{ LoggedInUser: followPage.LoggedInUser, -- 2.43.0