use generic SetUserSettings function, remove specific function

This commit is contained in:
yequari 2025-05-23 10:15:30 -07:00
parent 3c811c9533
commit 1a41a94b41
2 changed files with 19 additions and 19 deletions

View File

@ -3,6 +3,7 @@ package main
import (
"errors"
"net/http"
"time"
"git.32bit.cafe/32bitcafe/guestbook/internal/forms"
"git.32bit.cafe/32bitcafe/guestbook/internal/models"
@ -137,7 +138,7 @@ func (app *application) getUserSettings(w http.ResponseWriter, r *http.Request)
}
func (app *application) putUserSettings(w http.ResponseWriter, r *http.Request) {
userId := app.getCurrentUser(r).ID
user := app.getCurrentUser(r)
var form forms.UserSettingsForm
err := app.decodePostForm(r, &form)
if err != nil {
@ -150,7 +151,12 @@ func (app *application) putUserSettings(w http.ResponseWriter, r *http.Request)
// TODO: rerender template with errors
app.clientError(w, http.StatusUnprocessableEntity)
}
err = app.users.SetLocalTimezone(userId, form.LocalTimezone)
user.Settings.LocalTimezone, err = time.LoadLocation(form.LocalTimezone)
if err != nil {
app.serverError(w, r, err)
return
}
err = app.users.UpdateUserSettings(user.ID, user.Settings)
if err != nil {
app.serverError(w, r, err)
return

View File

@ -15,7 +15,7 @@ type UserSettings struct {
}
const (
USER_TIMEZONE = "local_timezone"
SettingUserTimezone = "local_timezone"
)
type User struct {
@ -88,6 +88,9 @@ func (m *UserModel) Insert(shortId uint64, username string, email string, passwo
return err
}
err = m.initializeUserSettings(id, settings)
if err != nil {
return err
}
return nil
}
@ -201,7 +204,7 @@ func (m *UserModel) GetSettings(userId int64) (UserSettings, error) {
return settings, err
}
switch id {
case m.Settings[USER_TIMEZONE].id:
case m.Settings[SettingUserTimezone].id:
settings.LocalTimezone, err = time.LoadLocation(unconstrainedValue.String)
if err != nil {
panic(err)
@ -214,7 +217,7 @@ func (m *UserModel) GetSettings(userId int64) (UserSettings, error) {
func (m *UserModel) initializeUserSettings(userId int64, settings UserSettings) error {
stmt := `INSERT INTO user_settings (UserId, SettingId, AllowedSettingValueId, UnconstrainedValue)
VALUES (?, ?, ?, ?)`
_, err := m.DB.Exec(stmt, userId, m.Settings[USER_TIMEZONE].id, nil, settings.LocalTimezone.String())
_, err := m.DB.Exec(stmt, userId, m.Settings[SettingUserTimezone].id, nil, settings.LocalTimezone.String())
if err != nil {
return err
}
@ -222,7 +225,7 @@ func (m *UserModel) initializeUserSettings(userId int64, settings UserSettings)
}
func (m *UserModel) UpdateUserSettings(userId int64, settings UserSettings) error {
err := m.UpdateSetting(userId, m.Settings[USER_TIMEZONE], settings.LocalTimezone.String())
err := m.UpdateSetting(userId, m.Settings[SettingUserTimezone], settings.LocalTimezone.String())
if err != nil {
return err
}
@ -230,6 +233,10 @@ func (m *UserModel) UpdateUserSettings(userId int64, settings UserSettings) erro
}
func (m *UserModel) UpdateSetting(userId int64, setting Setting, value string) error {
valid := setting.Validate(value)
if !valid {
return ErrInvalidSettingValue
}
stmt := `UPDATE user_settings SET
AllowedSettingValueId=IFNULL(
(SELECT Id FROM allowed_setting_values WHERE SettingId = user_settings.SettingId AND ItemValue = ?), AllowedSettingValueId
@ -250,16 +257,3 @@ func (m *UserModel) UpdateSetting(userId int64, setting Setting, value string) e
}
return nil
}
func (m *UserModel) SetLocalTimezone(userId int64, timezone string) error {
setting := m.Settings[USER_TIMEZONE]
valid := setting.Validate(timezone)
if !valid {
return ErrInvalidSettingValue
}
err := m.UpdateSetting(userId, setting, timezone)
if err != nil {
return err
}
return nil
}