package handlers import ( "log" "net/http" "threadr/models" "github.com/gorilla/sessions" ) func ProfileEditHandler(app *App) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session := r.Context().Value("session").(*sessions.Session) userID, ok := session.Values["user_id"].(int) if !ok { http.Redirect(w, r, app.Config.ThreadrDir+"/login/", http.StatusFound) return } if r.Method == http.MethodPost { displayName := r.FormValue("display_name") pfpURL := r.FormValue("pfp_url") bio := r.FormValue("bio") err := models.UpdateUserProfile(app.DB, userID, displayName, pfpURL, bio) if err != nil { log.Printf("Error updating profile: %v", err) http.Error(w, "Failed to update profile", http.StatusInternalServerError) return } http.Redirect(w, r, app.Config.ThreadrDir+"/profile/", http.StatusFound) return } user, err := models.GetUserByID(app.DB, userID) if err != nil { log.Printf("Error fetching user: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } if user == nil { http.Error(w, "User not found", http.StatusNotFound) return } data := struct { PageData User models.User }{ PageData: PageData{ Title: "ThreadR - Edit Profile", Navbar: "profile", LoggedIn: true, ShowCookieBanner: false, BasePath: app.Config.ThreadrDir, StaticPath: app.Config.ThreadrDir + "/static", CurrentURL: r.URL.Path, }, User: *user, } if err := app.Tmpl.ExecuteTemplate(w, "profile_edit", data); err != nil { log.Printf("Error executing template in ProfileEditHandler: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } } }