106 lines
3.2 KiB
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)
|
|
|
|
}
|