refactor(settings): changed config to settings and added in the update method for this as well

strict fields on the updates so we can only change what we want in here
This commit is contained in:
2025-07-30 19:35:13 -05:00
parent 78be07c8bb
commit a0aa75c5a0
5 changed files with 118 additions and 19 deletions

View File

@@ -1,25 +1,21 @@
package settings
import (
"encoding/json"
"github.com/gin-gonic/gin"
"lst.net/utils/db"
"lst.net/utils/inputs"
logging "lst.net/utils/logger"
)
type SettingUpdateInput struct {
Description *string `json:"description"`
Value *string `json:"value"`
Enabled *bool `json:"enabled"`
AppService *string `json:"app_service"`
}
func RegisterSettingsRoutes(l *gin.Engine, baseUrl string) {
// seed the db on start up
db.SeedConfigs(db.DB)
s := l.Group(baseUrl + "/api/v1")
s.GET("/settings", getSettings)
s.PATCH("/settings", updateSettingById)
s.PATCH("/settings/:id", updateSettingById)
}
func getSettings(c *gin.Context) {
@@ -39,6 +35,7 @@ func getSettings(c *gin.Context) {
"error": err,
})
c.JSON(500, gin.H{"message": "There was an error getting the settings", "error": err})
return
}
c.JSON(200, gin.H{"message": "Current settings", "data": configs})
@@ -46,18 +43,44 @@ func getSettings(c *gin.Context) {
func updateSettingById(c *gin.Context) {
logger := logging.New()
var setting SettingUpdateInput
settingID := c.Param("id")
err := c.ShouldBindBodyWithJSON(&setting)
if settingID == "" {
c.JSON(500, gin.H{"message": "Invalid data"})
logger.Error("Invalid data", "system", map[string]interface{}{
"endpoint": "/api/v1/settings",
"client_ip": c.ClientIP(),
"user_agent": c.Request.UserAgent(),
})
return
}
var setting inputs.SettingUpdateInput
if err != nil {
c.JSON(500, gin.H{"message": "Internal Server Error"})
logger.Error("Current Settings", "system", map[string]interface{}{
//err := c.ShouldBindBodyWithJSON(&setting)
decoder := json.NewDecoder(c.Request.Body) // more strict and will force us to have correct data
decoder.DisallowUnknownFields()
if err := decoder.Decode(&setting); err != nil {
c.JSON(400, gin.H{"message": "Invalid request body", "error": err.Error()})
logger.Error("Invalid request body", "system", map[string]interface{}{
"endpoint": "/api/v1/settings",
"client_ip": c.ClientIP(),
"user_agent": c.Request.UserAgent(),
"error": err,
})
return
}
if err := db.UpdateConfig(db.DB, settingID, setting); err != nil {
c.JSON(500, gin.H{"message": "Failed to update setting", "error": err.Error()})
logger.Error("Failed to update setting", "system", map[string]interface{}{
"endpoint": "/api/v1/settings",
"client_ip": c.ClientIP(),
"user_agent": c.Request.UserAgent(),
"error": err,
})
return
}
c.JSON(200, gin.H{"message": "Setting was just updated", "data": setting})