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

242 lines
7.9 KiB
Go

package handlers
import (
"Yimaru-Backend/internal/domain"
"Yimaru-Backend/internal/web_server/response"
"fmt"
"time"
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
)
func (h *Handler) GetGlobalSettingList(c *fiber.Ctx) error {
settingsList, err := h.settingSvc.GetGlobalSettingList(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())
}
res := domain.ConvertSettingListRes(settingsList)
return response.WriteJSON(c, fiber.StatusOK, "All Settings retrieved successfully", res, nil)
}
func (h *Handler) GetGlobalSettingByKey(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.GetGlobalSetting(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) UpdateGlobalSettingList(c *fiber.Ctx) error {
var req domain.SaveSettingListReq
if err := c.BodyParser(&req); err != nil {
h.mongoLoggerSvc.Info("Failed to parse SaveSettingListReq",
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 SaveSettingListReq",
zap.Int("status_code", fiber.StatusBadRequest),
zap.String("errMsg", errMsg),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusBadRequest, errMsg)
}
settingList := domain.ConvertSaveSettingListReq(req)
err := h.settingSvc.UpdateGlobalSettingList(c.Context(), settingList)
if err != nil {
h.mongoLoggerSvc.Info("failed to save setting",
zap.Any("setting_list", settingList),
zap.Int("status_code", fiber.StatusInternalServerError),
zap.Time("timestamp", time.Now()),
)
return fiber.NewError(fiber.StatusInternalServerError, "failed to save setting")
}
settingsList, err := h.settingSvc.GetGlobalSettingList(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())
}
res := domain.ConvertSettingListRes(settingsList)
return response.WriteJSON(c, fiber.StatusOK, "setting updated", res, nil)
}
// func (h *Handler) SaveCompanySettingList(c *fiber.Ctx) error {
// companyID := c.Locals("company_id").(domain.ValidInt64)
// if !companyID.Valid {
// h.BadRequestLogger().Error("invalid company id")
// return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
// }
// var req domain.SaveSettingListReq
// if err := c.BodyParser(&req); err != nil {
// h.mongoLoggerSvc.Info("Failed to parse SaveSettingListReq",
// 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 SaveSettingListReq",
// zap.Int("status_code", fiber.StatusBadRequest),
// zap.String("errMsg", errMsg),
// zap.Time("timestamp", time.Now()),
// )
// return fiber.NewError(fiber.StatusBadRequest, errMsg)
// }
// // settingList := domain.ConvertSaveSettingListReq(req)
// // err := h.settingSvc.InsertCompanySettingList(c.Context(), settingList, companyID.Value)
// // if err != nil {
// // h.mongoLoggerSvc.Info("failed to save setting",
// // zap.Any("setting_list", settingList),
// // zap.Int("status_code", fiber.StatusInternalServerError),
// // zap.Time("timestamp", time.Now()),
// // )
// // return fiber.NewError(fiber.StatusInternalServerError, "failed to save setting")
// // }
// settingsList, err := h.settingSvc.GetOverrideSettingsList(c.Context(), companyID.Value)
// 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)
// }
// func (h *Handler) GetCompanySettingList(c *fiber.Ctx) error {
// companyID := c.Locals("company_id").(domain.ValidInt64)
// if !companyID.Valid {
// h.BadRequestLogger().Error("invalid company id")
// return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
// }
// settingsList, err := h.settingSvc.GetOverrideSettingsList(c.Context(), companyID.Value)
// 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())
// }
// res := domain.ConvertSettingListRes(settingsList)
// return response.WriteJSON(c, fiber.StatusOK, "All Settings retrieved successfully", res, nil)
// }
// /api/v1/{tenant_slug}/settings/{key}
func (h *Handler) DeleteCompanySetting(c *fiber.Ctx) error {
companyID := c.Locals("company_id").(domain.ValidInt64)
if !companyID.Valid {
h.BadRequestLogger().Error("invalid company id")
return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
}
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")
}
// err := h.settingSvc.DeleteCompanySetting(c.Context(), companyID.Value, settingKey)
// if err != nil {
// h.mongoLoggerSvc.Error("Failed to delete company override settings",
// zap.Int("status_code", fiber.StatusInternalServerError),
// zap.Error(err),
// zap.Time("timestamp", time.Now()),
// )
// return fiber.NewError(fiber.StatusInternalServerError, "Failed to delete company override settings:"+err.Error())
// }
return response.WriteJSON(c, fiber.StatusOK, "setting deleted", nil, nil)
}
func (h *Handler) DeleteAllCompanySetting(c *fiber.Ctx) error {
companyID := c.Locals("company_id").(domain.ValidInt64)
if !companyID.Valid {
h.BadRequestLogger().Error("invalid company id")
return fiber.NewError(fiber.StatusBadRequest, "invalid company id")
}
// err := h.settingSvc.DeleteAllCompanySetting(c.Context(), companyID.Value)
// if err != nil {
// h.mongoLoggerSvc.Error("Failed to delete company override settings",
// zap.Int("status_code", fiber.StatusInternalServerError),
// zap.Error(err),
// zap.Time("timestamp", time.Now()),
// )
// return fiber.NewError(fiber.StatusInternalServerError, "Failed to delete company override settings:"+err.Error())
// }
return response.WriteJSON(c, fiber.StatusOK, "setting deleted", nil, nil)
}