package restricted import ( "strconv" "git.ma-al.com/goc_daniel/b2b/app/config" "git.ma-al.com/goc_daniel/b2b/app/service/productDescriptionService" "git.ma-al.com/goc_daniel/b2b/app/utils/i18n" "git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors" "github.com/gofiber/fiber/v3" ) // ProductDescriptionHandler handles endpoints that receive, save and translate product descriptions. type ProductDescriptionHandler struct { productDescriptionService *productDescriptionService.ProductDescriptionService config *config.Config } // NewProductDescriptionHandler creates a new ProductDescriptionHandler instance func NewProductDescriptionHandler() *ProductDescriptionHandler { productDescriptionService := productDescriptionService.New() return &ProductDescriptionHandler{ productDescriptionService: productDescriptionService, config: config.Get(), } } // ProductDescriptionRoutes registers all product description routes func ProductDescriptionHandlerRoutes(r fiber.Router) fiber.Router { handler := NewProductDescriptionHandler() r.Get("/get-product-description", handler.GetProductDescription) r.Post("/save-product-description", handler.SaveProductDescription) r.Get("/translate-product-description", handler.TranslateProductDescription) return r } // GetProductDescription returns the product description for a given product ID func (h *ProductDescriptionHandler) GetProductDescription(c fiber.Ctx) error { userID, ok := c.Locals("userID").(uint) if !ok { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody), // possibly could return a different error }) } productID_attribute := c.Query("productID") productID, err := strconv.Atoi(productID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } productShopID_attribute := c.Query("productShopID") productShopID, err := strconv.Atoi(productShopID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } productLangID_attribute := c.Query("productLangID") productLangID, err := strconv.Atoi(productLangID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } response, err := h.productDescriptionService.GetProductDescription(userID, uint(productID), uint(productShopID), uint(productLangID)) if err != nil { return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, err), }) } return c.JSON(response) } // SaveProductDescription saves the description for a given product ID, in given shop and language func (h *ProductDescriptionHandler) SaveProductDescription(c fiber.Ctx) error { userID, ok := c.Locals("userID").(uint) if !ok { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody), // possibly could return a different error }) } productID_attribute := c.Query("productID") productID, err := strconv.Atoi(productID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } productShopID_attribute := c.Query("productShopID") productShopID, err := strconv.Atoi(productShopID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } productLangID_attribute := c.Query("productLangID") productLangID, err := strconv.Atoi(productLangID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } updates := make(map[string]string) if err := c.Bind().Body(&updates); err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody), }) } err = h.productDescriptionService.SaveProductDescription(userID, uint(productID), uint(productShopID), uint(productLangID), updates) if err != nil { return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, err), }) } return c.JSON(fiber.Map{ "message": i18n.T_(c, "product_description.successfully_updated_fields"), }) } // GetProductDescription returns the product description for a given product ID func (h *ProductDescriptionHandler) TranslateProductDescription(c fiber.Ctx) error { userID, ok := c.Locals("userID").(uint) if !ok { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody), // possibly could return a different error }) } productID_attribute := c.Query("productID") productID, err := strconv.Atoi(productID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } productShopID_attribute := c.Query("productShopID") productShopID, err := strconv.Atoi(productShopID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } productFromLangID_attribute := c.Query("productFromLangID") productFromLangID, err := strconv.Atoi(productFromLangID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } productToLangID_attribute := c.Query("productToLangID") productToLangID, err := strconv.Atoi(productToLangID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } model := c.Query("model") if model != "OpenAI" && model != "Google" { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute), }) } response, err := h.productDescriptionService.TranslateProductDescription(userID, uint(productID), uint(productShopID), uint(productFromLangID), uint(productToLangID), model) if err != nil { return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{ "error": responseErrors.GetErrorCode(c, err), }) } return c.JSON(response) }