Files
upstream-traggo/setting/usersettings.go
upstream-mirror cda7c1a474
Some checks failed
build / build (push) Failing after 3s
snapshot of https://github.com/traggo/server.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 05:24:45 +05:00

140 lines
3.9 KiB
Go

package setting
import (
"context"
"time"
"github.com/traggo/server/auth"
"github.com/traggo/server/generated/gqlmodel"
"github.com/traggo/server/model"
)
// SetUserSettings sets the user settings.
func (r *ResolverForSettings) SetUserSettings(ctx context.Context, settings gqlmodel.InputUserSettings) (*gqlmodel.UserSettings, error) {
internal := model.UserSetting{
Theme: toInternalTheme(settings.Theme),
FirstDayOfTheWeek: toInternalWeekday(settings.FirstDayOfTheWeek).String(),
UserID: auth.GetUser(ctx).ID,
DateLocale: toInternalDateLocale(settings.DateLocale),
DateTimeInputStyle: toInternalDateTimeInputStyle(settings.DateTimeInputStyle),
}
save := r.DB.Save(internal)
return toExternal(internal), save.Error
}
// UserSettings returns the user settings.
func (r *ResolverForSettings) UserSettings(ctx context.Context) (*gqlmodel.UserSettings, error) {
settings, err := Get(ctx, r.DB)
return toExternal(settings), err
}
func toExternal(internal model.UserSetting) *gqlmodel.UserSettings {
return &gqlmodel.UserSettings{
Theme: toExternalTheme(internal.Theme),
DateLocale: toExternalDateLocale(internal.DateLocale),
FirstDayOfTheWeek: toExternalWeekday(internal.FirstDayOfTheWeekTimeWeekday()),
DateTimeInputStyle: toExternalDateTimeInputStyle(internal.DateTimeInputStyle),
}
}
func toInternalDateLocale(locale gqlmodel.DateLocale) string {
switch locale.String() {
case model.DateLocaleAmerican, model.DateLocaleGerman, model.DateLocaleAmerican24h, model.DateLocaleAustralian, model.DateLocaleBritish:
return locale.String()
default:
return model.DateLocaleAmerican
}
}
func toExternalDateLocale(dateLocale string) gqlmodel.DateLocale {
if gqlmodel.DateLocale(dateLocale).IsValid() {
return gqlmodel.DateLocale(dateLocale)
}
if dateLocale == "English24h" {
return gqlmodel.DateLocaleAmerican24h
}
return gqlmodel.DateLocaleAmerican
}
func toInternalTheme(theme gqlmodel.Theme) string {
switch theme.String() {
case model.ThemeGruvboxDark, model.ThemeGruvboxLight, model.ThemeMaterialLight, model.ThemeMaterialDark:
return theme.String()
default:
return model.ThemeGruvboxDark
}
}
func toExternalTheme(theme string) gqlmodel.Theme {
if gqlmodel.Theme(theme).IsValid() {
return gqlmodel.Theme(theme)
}
return gqlmodel.ThemeGruvboxDark
}
func toExternalWeekday(weekday time.Weekday) gqlmodel.WeekDay {
switch weekday {
case time.Monday:
return gqlmodel.WeekDayMonday
case time.Tuesday:
return gqlmodel.WeekDayTuesday
case time.Wednesday:
return gqlmodel.WeekDayWednesday
case time.Thursday:
return gqlmodel.WeekDayThursday
case time.Friday:
return gqlmodel.WeekDayFriday
case time.Saturday:
return gqlmodel.WeekDaySaturday
case time.Sunday:
return gqlmodel.WeekDaySunday
default:
panic("unknown weekday")
}
}
func toInternalWeekday(weekday gqlmodel.WeekDay) time.Weekday {
switch weekday {
case gqlmodel.WeekDayMonday:
return time.Monday
case gqlmodel.WeekDayTuesday:
return time.Tuesday
case gqlmodel.WeekDayWednesday:
return time.Wednesday
case gqlmodel.WeekDayThursday:
return time.Thursday
case gqlmodel.WeekDayFriday:
return time.Friday
case gqlmodel.WeekDaySaturday:
return time.Saturday
case gqlmodel.WeekDaySunday:
return time.Sunday
default:
panic("unknown weekday")
}
}
func toExternalDateTimeInputStyle(style string) gqlmodel.DateTimeInputStyle {
switch style {
case model.DateTimeInputFancy:
return gqlmodel.DateTimeInputStyleFancy
case model.DateTimeInputNative:
return gqlmodel.DateTimeInputStyleNative
default:
return gqlmodel.DateTimeInputStyleFancy
}
}
func toInternalDateTimeInputStyle(style gqlmodel.DateTimeInputStyle) string {
switch style {
case gqlmodel.DateTimeInputStyleFancy:
return model.DateTimeInputFancy
case gqlmodel.DateTimeInputStyleNative:
return model.DateTimeInputNative
default:
return model.DateTimeInputFancy
}
}