From 07453b0f0259573d52b12d76f241548bd88d5d65 Mon Sep 17 00:00:00 2001 From: Haelnorr Date: Sun, 16 Feb 2025 10:44:04 +1100 Subject: [PATCH] Added ability for user to change their bio --- db/user.go | 10 ++ handlers/account.go | 32 +++++- server/routes.go | 10 +- view/component/account/changebio.templ | 117 ++++++++++++++++++++ view/component/account/changeusername.templ | 8 +- view/component/account/general.templ | 1 + 6 files changed, 170 insertions(+), 8 deletions(-) create mode 100644 view/component/account/changebio.templ diff --git a/db/user.go b/db/user.go index a330357..fe62349 100644 --- a/db/user.go +++ b/db/user.go @@ -48,3 +48,13 @@ func (user *User) ChangeUsername(conn *sql.DB, newUsername string) error { } return nil } + +// Change the user's bio +func (user *User) ChangeBio(conn *sql.DB, newBio string) error { + query := `UPDATE users SET bio = ? WHERE id = ?` + _, err := conn.Exec(query, newBio, user.ID) + if err != nil { + return errors.Wrap(err, "conn.Exec") + } + return nil +} diff --git a/handlers/account.go b/handlers/account.go index 727f8ee..4ebac66 100644 --- a/handlers/account.go +++ b/handlers/account.go @@ -49,7 +49,8 @@ func HandleChangeUsername( return } if !unique { - account.ChangeUsername("Usename is taken", newUsername).Render(r.Context(), w) + account.ChangeUsername("Username is taken", newUsername). + Render(r.Context(), w) return } user := contexts.GetUser(r.Context()) @@ -59,7 +60,34 @@ func HandleChangeUsername( w.WriteHeader(http.StatusInternalServerError) return } - w.Header().Set("HX-Redirect", "/account") + w.Header().Set("HX-Refresh", "true") + }, + ) +} + +// Handles a request to change the users bio +func HandleChangeBio( + logger *zerolog.Logger, + conn *sql.DB, +) http.Handler { + return http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + newBio := r.FormValue("bio") + leng := len([]rune(newBio)) + if leng > 128 { + account.ChangeBio("Bio limited to 128 characters", newBio). + Render(r.Context(), w) + return + } + user := contexts.GetUser(r.Context()) + err := user.ChangeBio(conn, newBio) + if err != nil { + logger.Error().Err(err).Msg("Error updating bio") + w.WriteHeader(http.StatusInternalServerError) + return + } + w.Header().Set("HX-Refresh", "true") }, ) } diff --git a/server/routes.go b/server/routes.go index 2804a08..c89272a 100644 --- a/server/routes.go +++ b/server/routes.go @@ -60,6 +60,12 @@ func addRoutes( // Logout mux.Handle("POST /logout", handlers.HandleLogout(config, logger, conn)) + // Reauthentication request + mux.Handle("POST /reauthenticate", + middleware.RequiresLogin( + handlers.HandleReauthenticate(logger, config, conn), + )) + // Profile page mux.Handle("GET /profile", middleware.RequiresLogin( @@ -81,8 +87,8 @@ func addRoutes( handlers.HandleChangeUsername(logger, conn), ), )) - mux.Handle("POST /reauthenticate", + mux.Handle("POST /change-bio", middleware.RequiresLogin( - handlers.HandleReauthenticate(logger, config, conn), + handlers.HandleChangeBio(logger, conn), )) } diff --git a/view/component/account/changebio.templ b/view/component/account/changebio.templ new file mode 100644 index 0000000..e48d5c4 --- /dev/null +++ b/view/component/account/changebio.templ @@ -0,0 +1,117 @@ +package account + +import "projectreshoot/contexts" + +templ ChangeBio(err string, bio string) { + {{ + user := contexts.GetUser(ctx) + if bio == "" { + bio = user.Bio + } + }} +
+
+
+ +
+ + +
+
+
+ + +
+
+

+ +
+} diff --git a/view/component/account/changeusername.templ b/view/component/account/changeusername.templ index ddf5223..00e5bf5 100644 --- a/view/component/account/changeusername.templ +++ b/view/component/account/changeusername.templ @@ -24,7 +24,7 @@ templ ChangeUsername(err string, username string) { >
@@ -85,7 +85,7 @@ templ ChangeUsername(err string, username string) {

@ChangeUsername("", "") + @ChangeBio("", "") }