package restricted import ( "strconv" "git.ma-al.com/goc_daniel/b2b/app/config" "git.ma-al.com/goc_daniel/b2b/app/delivery/middleware" "git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms" "git.ma-al.com/goc_daniel/b2b/app/model" "git.ma-al.com/goc_daniel/b2b/app/service/currencyService" "git.ma-al.com/goc_daniel/b2b/app/utils/i18n" "git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor" "git.ma-al.com/goc_daniel/b2b/app/utils/logger" "git.ma-al.com/goc_daniel/b2b/app/utils/nullable" "git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params" "git.ma-al.com/goc_daniel/b2b/app/utils/response" "git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors" "github.com/gofiber/fiber/v3" ) type CurrencyHandler struct { CurrencyService *currencyService.CurrencyService config *config.Config } func NewCurrencyHandler() *CurrencyHandler { currencyService := currencyService.New() return &CurrencyHandler{ CurrencyService: currencyService, config: config.Get(), } } func CurrencyHandlerRoutes(r fiber.Router) fiber.Router { handler := NewCurrencyHandler() r.Patch("", middleware.Require(perms.CurrencyWrite), handler.PostCurrencyRate) r.Get("/list", handler.List) r.Get("/:id", handler.GetCurrencyRate) return r } func (h *CurrencyHandler) PostCurrencyRate(c fiber.Ctx) error { var currencyRate model.CurrencyRate if err := c.Bind().Body(¤cyRate); err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrJSONBody)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrJSONBody))) } err := h.CurrencyService.CreateCurrencyRate(¤cyRate) if err != nil { logger.Error("failed to create currency rate", "handler", "CurrencyHandler.PostCurrencyRate", "b2b_id_currency", currencyRate.B2bIdCurrency, "conversion_rate", currencyRate.ConversionRate, "error", err.Error(), ) return c.Status(responseErrors.GetErrorStatus(err)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } return c.JSON(response.Make(nullable.GetNil(""), 1, i18n.T_(c, response.Message_OK))) } func (h *CurrencyHandler) GetCurrencyRate(c fiber.Ctx) error { idStr := c.Params("id") id, err := strconv.Atoi(idStr) if err != nil { return c.Status(responseErrors.GetErrorStatus(err)).JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } currency, err := h.CurrencyService.Get(uint(id)) if err != nil { logger.Error("failed to get currency", "handler", "CurrencyHandler.GetCurrencyRate", "b2b_id_currency", id, "error", err.Error(), ) return c.Status(responseErrors.GetErrorStatus(err)).JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } return c.JSON(response.Make(currency, 0, i18n.T_(c, response.Message_OK))) } func (h *CurrencyHandler) List(c fiber.Ctx) error { langId, ok := localeExtractor.GetLangID(c) if !ok { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody))) } p, filt, err := query_params.ParseFilters[model.Currency](c, columnMappingCurrencies) if err != nil { return c.Status(responseErrors.GetErrorStatus(err)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } list, err := h.CurrencyService.Find(langId, p, filt) if err != nil { logger.Error("failed to get currency list", "handler", "CurrencyHandler.List", "lang_id", langId, "error", err.Error(), ) return c.Status(responseErrors.GetErrorStatus(err)).JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK))) } var columnMappingCurrencies map[string]string = map[string]string{ "id": "c.id", "ps_id_currency": "c.ps_id_currency", "is_default": "c.is_default", "is_active": "c.is_active", "conversion_rate": "r.conversion_rate", }