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) }