package settings import ( "github.com/gofiber/fiber/v2" "github.com/techxcar/backend/internal/auth" "github.com/techxcar/backend/pkg/database" ) func RegisterRoutes(app *fiber.App, db *database.DB, secret string) { read := []fiber.Handler{ auth.RequireAuth(secret), auth.RequireRole("tenant_admin", "manager"), auth.TenantMiddleware(db), } admin := []fiber.Handler{ auth.RequireAuth(secret), auth.RequireRole("tenant_admin"), auth.TenantMiddleware(db), } app.Get("/api/v1/settings", append(read, getSettingsH())...) app.Put("/api/v1/settings", append(admin, updateSettingsH())...) } func getSettingsH() fiber.Handler { return func(c *fiber.Ctx) error { conn := auth.GetConn(c) s, err := GetSettings(c.Context(), conn) if err != nil { return fiber.NewError(500, "erro ao obter definições") } return c.JSON(fiber.Map{"data": s, "error": nil}) } } func updateSettingsH() fiber.Handler { return func(c *fiber.Ctx) error { var body map[string]string if err := c.BodyParser(&body); err != nil { return fiber.NewError(400, "corpo do pedido inválido") } conn := auth.GetConn(c) for k, v := range body { if !AllowedKeys[k] { return fiber.NewError(400, "chave inválida: "+k) } if err := SetSetting(c.Context(), conn, k, v); err != nil { return fiber.NewError(500, "erro ao guardar definição: "+k) } } s, err := GetSettings(c.Context(), conn) if err != nil { return fiber.NewError(500, "erro ao obter definições") } return c.JSON(fiber.Map{"data": s, "error": nil}) } }