Files
InfantrySkillCalculator/controllers/user_settings_controller.go

77 lines
2.2 KiB
Go

package controllers
import (
"InfantrySkillCalculator/models"
"InfantrySkillCalculator/utils"
"github.com/gin-gonic/gin"
"net/http"
"session"
)
type UpdateSettingsInput struct {
ActiveGameID uint `json:"active_game_id"`
SquadColors bool `json:"squad_colors"`
CalcMedian bool `json:"calc_median"`
UseCache bool `json:"use_cache"`
}
// GetSettings GET /settings
func GetSettings(c *gin.Context) {
var settings models.UserSettings
username, ok := session.GetUsername(c)
if !ok {
c.JSON(http.StatusBadRequest, gin.H{"error": "Not logged in!"})
utils.Logger.Errorf("[SETTINGS] User not logged in: %s", username)
return
}
if err := models.DB.Where("username = ?", username).First(&settings).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "No settings available!"})
utils.Logger.Errorf("[SETTINGS] No settings available for user %s", username)
return
}
sanitizedSettings := map[string]interface{}{
"active_game_id": settings.ActiveGameID,
"squad_colors": settings.SquadColors,
"calc_median": settings.CalcMedian,
"use_cache": settings.UseCache,
}
c.JSON(http.StatusOK, sanitizedSettings)
}
// UpdateSettings PATCH /settings
func UpdateSettings(c *gin.Context) {
var settings models.UserSettings
username, ok := session.GetUsername(c)
if !ok {
c.JSON(http.StatusBadRequest, gin.H{"error": "Not logged in!"})
utils.Logger.Errorf("[SETTINGS] User not logged in: %s", username)
return
}
if err := models.DB.Where("username = ?", username).First(&settings).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "No settings available!"})
utils.Logger.Errorf("[SETTINGS] No settings available for user %s", username)
return
}
var input UpdateSettingsInput
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
utils.Logger.Errorf("[SETTINGS] Failed to bind JSON: %s", err.Error())
return
}
if err := models.DB.Model(&settings).Updates(input).Error; err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
utils.Logger.Errorf("[SETTINGS] Failed to update settings: %s", err.Error())
return
}
c.JSON(http.StatusOK, nil)
}