Yimaru-BackEnd/internal/web_server/handlers/settings_handler.go

106 lines
3.2 KiB
Go

package handlers
import (
"fmt"
"time"
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
)
func (h *Handler) GetSettingList(c *fiber.Ctx) error {
settingsList, err := h.settingSvc.GetSettingList(c.Context())
if err != nil {
h.mongoLoggerSvc.Error("Failed to fetch settings",
zap.Int("status_code", fiber.StatusInternalServerError),
zap.Error(err),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusInternalServerError, "Failed to get setting list:"+err.Error())
}
return response.WriteJSON(c, fiber.StatusOK, "All Settings retrieved successfully", settingsList, nil)
}
func (h *Handler) GetSettingByKey(c *fiber.Ctx) error {
settingKey := c.Params("key")
if settingKey == "" {
h.mongoLoggerSvc.Info("empty setting key",
zap.Int("status_code", fiber.StatusBadRequest),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusBadRequest, "setting key must be passed")
}
setting, err := h.settingSvc.GetSetting(c.Context(), settingKey)
if err != nil {
h.mongoLoggerSvc.Info("invalid setting key",
zap.String("setting_key", settingKey),
zap.Int("status_code", fiber.StatusBadRequest),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusBadRequest, "setting key is invalid")
}
res := domain.ConvertSetting(setting)
return response.WriteJSON(c, fiber.StatusOK, "setting retrieved successfully", res, nil)
}
func (h *Handler) UpdateSettingList(c *fiber.Ctx) error {
var req domain.UpdateSettingListReq
if err := c.BodyParser(&req); err != nil {
h.mongoLoggerSvc.Info("Failed to parse UpdateSettingListReq",
zap.Int("status_code", fiber.StatusBadRequest),
zap.Error(err),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusBadRequest, "Invalid request")
}
valErrs, ok := h.validator.Validate(c, req)
if !ok {
var errMsg string
for field, msg := range valErrs {
errMsg += fmt.Sprintf("%s: %s; ", field, msg)
}
h.mongoLoggerSvc.Info("Failed to validate UpdateSettingListReq",
zap.Int("status_code", fiber.StatusBadRequest),
zap.String("errMsg", errMsg),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusBadRequest, errMsg)
}
settingList := domain.ConvertUpdateSettingListReq(req)
err := h.settingSvc.UpdateSettingList(c.Context(), settingList)
if err != nil {
h.mongoLoggerSvc.Info("failed to update setting",
zap.Any("setting_list", settingList),
zap.Int("status_code", fiber.StatusInternalServerError),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusInternalServerError, "failed to update setting")
}
settingsList, err := h.settingSvc.GetSettingList(c.Context())
if err != nil {
h.mongoLoggerSvc.Error("Failed to fetch settings",
zap.Int("status_code", fiber.StatusInternalServerError),
zap.Error(err),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusInternalServerError, "Failed to get setting list:"+err.Error())
}
return response.WriteJSON(c, fiber.StatusOK, "setting updated", settingsList, nil)
}