From b5f6ba79ed86ca13e7f3e76d9ea76057dd56555c Mon Sep 17 00:00:00 2001 From: brookjeynes Date: Wed, 15 Oct 2025 07:15:31 +1000 Subject: [PATCH] feat(handlers/study-session): use slogger Change-Id: quxqummxpuzroymtottwqusltkustlup Signed-off-by: brookjeynes --- internal/server/handlers/study-session.go | 105 ++++++++++++---------- 1 file changed, 58 insertions(+), 47 deletions(-) diff --git a/internal/server/handlers/study-session.go b/internal/server/handlers/study-session.go index 9ed7167..6deba4b 100644 --- a/internal/server/handlers/study-session.go +++ b/internal/server/handlers/study-session.go @@ -3,7 +3,6 @@ package handlers import ( "errors" "fmt" - "log" "net/http" "strconv" "time" @@ -117,9 +116,11 @@ func (h *Handler) parseStudySessionForm(r *http.Request) (db.StudySession, error } func (h *Handler) HandleStudySessionFeed(w http.ResponseWriter, r *http.Request) { + l := h.Logger.With("handler", "HandleStudySessionFeed") + isFriends, err := strconv.ParseBool(r.URL.Query().Get("friends")) if err != nil { - log.Println("failed to parse friends value:", err) + l.Error("failed to parse friends value", "err", err) isFriends = false } @@ -129,7 +130,7 @@ func (h *Handler) HandleStudySessionFeed(w http.ResponseWriter, r *http.Request) } page, err := strconv.ParseInt(pageStr, 10, 64) if err != nil { - log.Println("failed to parse page value:", err) + l.Error("failed to parse page value", "err", err) page = 1 } if page == 0 { @@ -148,32 +149,32 @@ func (h *Handler) HandleStudySessionFeed(w http.ResponseWriter, r *http.Request) if !isFriends { feed, err = db.GetStudySessionFeed(h.Db, pageSize+1, int(offset)) if err != nil { - log.Println("failed to get global feed:", err) + l.Error("failed to get global feed", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.") return } err = h.GetBskyProfileHydratedSessionFeed(feed) if err != nil { - log.Println("failed to hydrate bsky profiles:", err) + l.Error("failed to hydrate bsky profiles", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.") return } } else { if fetchUserError != nil { - log.Println("failed to get logged-in user:", err) + l.Error("failed to get logged-in user", "err", err) htmx.HxRedirect(w, "/login") return } feed, err = db.GetFriendsStudySessionFeed(h.Db, user.Did, pageSize+1, int(offset)) if err != nil { - log.Println("failed to get global feed:", err) + l.Error("failed to get global feed", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.") return } err = h.GetBskyProfileHydratedSessionFeed(feed) if err != nil { - log.Println("failed to hydrate bsky profiles:", err) + l.Error("failed to hydrate bsky profiles", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.") return } @@ -181,7 +182,7 @@ func (h *Handler) HandleStudySessionFeed(w http.ResponseWriter, r *http.Request) feed, err = ApplyPendingChanges(h, w, r, feed, PendingStudySessionCreation, PendingStudySessionUpdates, PendingStudySessionDeletion) if err != nil { - log.Printf("failed to save yoten-session after processing pending changes: %v", err) + l.Error("failed to save yoten-session after processing pending changes", "err", err) } nextPage := 0 @@ -200,16 +201,18 @@ func (h *Handler) HandleStudySessionFeed(w http.ResponseWriter, r *http.Request) } func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Request) { + l := h.Logger.With("handler", "HandleEditStudySessionPage") + client, err := h.Oauth.AuthorizedClient(r) if err != nil { - log.Println("failed to get authorized client:", err) + l.Error("failed to get authorized client", "err", err) htmx.HxRedirect(w, "/login") return } user, err := bsky.GetUserWithBskyProfile(h.Oauth, r) if err != nil { - log.Println("failed to get logged-in user:", err) + l.Error("failed to get logged-in user", "err", err) htmx.HxRedirect(w, "/login") return } @@ -217,13 +220,13 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ rkey := chi.URLParam(r, "rkey") studySession, err := db.GetStudySessionByRkey(h.Db, user.Did, rkey) if err != nil { - log.Println("failed to get study session from db:", err) + l.Error("failed to get study session from db", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to update study session, try again later.") return } if user.Did != studySession.Did { - log.Printf("user '%s' does not own record '%s'", user.Did, studySession.Rkey) + l.Error("user does not own record", "did", user.Did, "sessionDid", studySession.Did) htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to edit this study session.") return } @@ -232,17 +235,17 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ case http.MethodGet: userDefinedActivities, err := db.GetActivitiesByDid(h.Db, user.Did) if err != nil { - log.Println("failed to get user-defined activities:", err) + l.Error("failed to get user-defined activities", "err", err) } resources, err := db.GetResourcesByDid(h.Db, user.Did) if err != nil { - log.Println("failed to get user-defined resources:", err) + l.Error("failed to get user-defined resources", "err", err) } preDefinedActivities, err := db.GetPredefinedActivities(h.Db) if err != nil { - log.Println("failed to get pre-defined activities:", err) + l.Error("failed to get pre-defined activities", "err", err) } currentResource := studySession.Resource @@ -267,7 +270,7 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ languages, err := db.GetProfileLanguages(h.Db, user.Did) if err != nil { - log.Println("failed to fetch profile languages:", err) + l.Error("failed to fetch profile languages", "err", err) } views.EditStudySessionPage(views.EditStudySessionPageParams{ @@ -280,7 +283,7 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ case http.MethodPost: updatedStudySession, err := h.parseStudySessionForm(r) if err != nil { - log.Println("invalid study session form:", err) + l.Error("invalid study session form", "err", err) htmx.HxError(w, http.StatusBadRequest, "Failed to update study session, ensure all data is valid.") return } @@ -289,7 +292,7 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ updatedStudySession.CreatedAt = studySession.CreatedAt if err := db.ValidateStudySession(updatedStudySession); err != nil { - log.Println("invalid study session:", err) + l.Error("invalid study session", "err", err) switch { case errors.Is(err, db.ErrSessionDescriptionTooLong): htmx.HxError(w, http.StatusBadRequest, "Study session description cannot be more than 256 characters.") @@ -358,14 +361,14 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ SwapRecord: cid, }) if err != nil { - log.Println("failed to update study session record:", err) + l.Error("failed to update study session record", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to update study session, try again later.") return } err = SavePendingUpdate(h, w, r, PendingStudySessionUpdates, updatedStudySession) if err != nil { - log.Printf("failed to save yoten-session to add pending study session updates: %v", err) + l.Error("failed to save yoten-session to add pending study session updates", "err", err) } if !h.Config.Core.Dev { @@ -377,7 +380,7 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ Set("rkey", rkey), }) if err != nil { - log.Println("failed to enqueue posthog event:", err) + l.Error("failed to enqueue posthog event", "err", err) } } @@ -386,16 +389,18 @@ func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Requ } func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Request) { + l := h.Logger.With("handler", "HandleNewStudySessionPage") + user, err := bsky.GetUserWithBskyProfile(h.Oauth, r) if err != nil { - log.Println("failed to get logged-in user:", err) + l.Error("failed to get logged-in user", "err", err) htmx.HxRedirect(w, "/login") return } client, err := h.Oauth.AuthorizedClient(r) if err != nil { - log.Println("failed to get authorized client:", err) + l.Error("failed to get authorized client", "err", err) htmx.HxRedirect(w, "/login") return } @@ -404,18 +409,18 @@ func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Reque case http.MethodGet: profile, err := db.GetProfile(h.Db, user.Did) if err != nil { - log.Printf("failed to find %s in db: %s", user.Did, err) + l.Error("failed to find user in db", "did", user.Did, "err", err) htmx.HxError(w, http.StatusNotFound, "Failed to find user.") return } userDefinedActivities, err := db.GetActivitiesByDid(h.Db, user.Did) if err != nil { - log.Println("failed to get user-defined activities:", err) + l.Error("failed to get user-defined activities", "err", err) } preDefinedActivities, err := db.GetPredefinedActivities(h.Db) if err != nil { - log.Println("failed to get pre-defined activities:", err) + l.Error("failed to get pre-defined activities", "err", err) } activeActivities := utils.Filter(userDefinedActivities, func(activity db.Activity) bool { return activity.Status != db.Deleted @@ -424,7 +429,7 @@ func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Reque resources, err := db.GetResourcesByDid(h.Db, user.Did) if err != nil { - log.Println("failed to get user-defined resources:", err) + l.Error("failed to get user-defined resources", "err", err) } activeResources := utils.Filter(resources, func(resource db.Resource) bool { return resource.Status != db.Deleted @@ -440,7 +445,7 @@ func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Reque case http.MethodPost: newStudySession, err := h.parseStudySessionForm(r) if err != nil { - log.Println("invalid study session form:", err) + l.Error("invalid study session form", "err", err) htmx.HxError(w, http.StatusBadRequest, "Failed to update study session, ensure all data is valid.") return } @@ -459,7 +464,7 @@ func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Reque } if err := db.ValidateStudySession(newStudySession); err != nil { - log.Println("invalid study session:", err) + l.Error("invalid study session", "err", err) switch { case errors.Is(err, db.ErrSessionDescriptionTooLong): htmx.HxError(w, http.StatusBadRequest, "Study session description cannot be more than 256 characters.") @@ -521,14 +526,14 @@ func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Reque }, }) if err != nil { - log.Println("failed to create study session record:", err) + l.Error("failed to create study session record", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to create study session, try again later.") return } err = SavePendingCreate(h, w, r, PendingStudySessionCreation, newStudySession) if err != nil { - log.Printf("failed to save yoten-session to add pending study session creation: %v", err) + l.Error("failed to save yoten-session to add pending study session creation", "err", err) } if !h.Config.Core.Dev { @@ -545,7 +550,7 @@ func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Reque Set("date_is_today", newStudySession.Date.Truncate(24*time.Hour).Equal(time.Now().UTC().In(loc).Truncate(24*time.Hour))), }) if err != nil { - log.Println("failed to enqueue posthog event:", err) + l.Error("failed to enqueue posthog event", "err", err) } } @@ -554,16 +559,18 @@ func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Reque } func (h *Handler) HandleDeleteStudySession(w http.ResponseWriter, r *http.Request) { + l := h.Logger.With("handler", "HandleDeleteStudySession") + user := h.Oauth.GetUser(r) if user == nil { - log.Println("failed to get logged-in user") + l.Error("failed to get logged-in user") htmx.HxRedirect(w, "/login") return } client, err := h.Oauth.AuthorizedClient(r) if err != nil { - log.Println("failed to get authorized client:", err) + l.Error("failed to get authorized client", "err", err) htmx.HxError(w, http.StatusUnauthorized, "Failed to delete study session, try again later.") return } @@ -572,7 +579,7 @@ func (h *Handler) HandleDeleteStudySession(w http.ResponseWriter, r *http.Reques case http.MethodDelete: err := r.ParseForm() if err != nil { - log.Println("failed to parse study session delete form:", err) + l.Error("failed to parse study session delete form", "err", err) htmx.HxError(w, http.StatusBadRequest, "Failed to delete study session, try again later.") return } @@ -580,13 +587,13 @@ func (h *Handler) HandleDeleteStudySession(w http.ResponseWriter, r *http.Reques rkey := chi.URLParam(r, "rkey") studySession, err := db.GetStudySessionByRkey(h.Db, user.Did, rkey) if err != nil { - log.Println("failed to get study session from db:", err) + l.Error("failed to get study session from db", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to delete study session, try again later.") return } if user.Did != studySession.Did { - log.Println("failed to delete study session: user does not own record") + l.Error("user does not own record", "did", user.Did, "sessionDid", studySession.Did) htmx.HxError(w, http.StatusUnauthorized, "Failed to delete study session, try again later.") return } @@ -597,14 +604,14 @@ func (h *Handler) HandleDeleteStudySession(w http.ResponseWriter, r *http.Reques Rkey: rkey, }) if err != nil { - log.Println("failed to delete study session from PDS:", err) + l.Error("failed to delete study session from PDS", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to delete study session, try again later.") return } err = SavePendingDelete(h, w, r, PendingStudySessionDeletion, studySession) if err != nil { - log.Printf("failed to save yoten-session to add pending study session deletion: %v", err) + l.Error("failed to save yoten-session to add pending study session deletion", "err", err) } if !h.Config.Core.Dev { @@ -617,7 +624,7 @@ func (h *Handler) HandleDeleteStudySession(w http.ResponseWriter, r *http.Reques Set("session_age_seconds", time.Since(studySession.CreatedAt).Seconds()), }) if err != nil { - log.Println("failed to enqueue posthog event:", err) + l.Error("failed to enqueue posthog event", "err", err) } } @@ -644,6 +651,8 @@ func (h *Handler) GetBskyProfileHydratedSessionFeed(feed []*db.StudySessionFeedI } func (h *Handler) HandleStudySessionPage(w http.ResponseWriter, r *http.Request) { + l := h.Logger.With("handler", "HandleStudySessionPage") + user, _ := bsky.GetUserWithBskyProfile(h.Oauth, r) didOrHandle := chi.URLParam(r, "user") if didOrHandle == "" { @@ -661,21 +670,21 @@ func (h *Handler) HandleStudySessionPage(w http.ResponseWriter, r *http.Request) studySession, err := db.GetStudySessionByRkey(h.Db, ident.DID.String(), rkey) if err != nil { - log.Println("failed to retrieve study session:", err) + l.Error("failed to retrieve study session", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve study session, try again later.") return } bskyProfile, err := bsky.GetBskyProfile(ident.DID.String()) if err != nil { - log.Println("failed to retrieve bsky profile for study session:", err) + l.Error("failed to retrieve bsky profile for study session", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve bsky profile, try again later.") return } profile, err := db.GetProfile(h.Db, ident.DID.String()) if err != nil { - log.Println("failed to retrieve profile for study session:", err) + l.Error("failed to retrieve profile for study session", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve profile, try again later.") return } @@ -698,6 +707,8 @@ func (h *Handler) HandleStudySessionPage(w http.ResponseWriter, r *http.Request) } func (h *Handler) HandleStudySessionPageCommentFeed(w http.ResponseWriter, r *http.Request) { + l := h.Logger.With("handler", "HandleStudySessionPageCommentFeed") + user, _ := bsky.GetUserWithBskyProfile(h.Oauth, r) didOrHandle := chi.URLParam(r, "user") @@ -721,7 +732,7 @@ func (h *Handler) HandleStudySessionPageCommentFeed(w http.ResponseWriter, r *ht } page, err := strconv.ParseInt(pageStr, 10, 64) if err != nil { - log.Println("failed to parse page value:", err) + l.Error("failed to parse page value", "err", err) page = 1 } if page == 0 { @@ -733,7 +744,7 @@ func (h *Handler) HandleStudySessionPageCommentFeed(w http.ResponseWriter, r *ht commentFeed, err := db.GetCommentsForSession(h.Db, studySessionUri.String(), pageSize+1, int(offset)) if err != nil { - log.Println("failed to get comment feed:", err) + l.Error("failed to get comment feed", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to get comment feed, try again later.") return } @@ -769,7 +780,7 @@ func (h *Handler) HandleStudySessionPageCommentFeed(w http.ResponseWriter, r *ht populatedCommentFeed, err := h.BuildCommentFeed(finalFeed) if err != nil { - log.Println("failed to populate comment feed:", err) + l.Error("failed to populate comment feed", "err", err) htmx.HxError(w, http.StatusInternalServerError, "Failed to get comment feed, try again later.") return } -- 2.43.0