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/nullable" "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" ) // 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(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody))) } productID_attribute := c.Query("productID") productID, err := strconv.Atoi(productID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)). JSON(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute))) } description, err := h.productDescriptionService.GetProductDescription(userID, uint(productID), uint(productShopID), uint(productLangID)) if err != nil { return c.Status(responseErrors.GetErrorStatus(err)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } return c.JSON(response.Make(description, 1, i18n.T_(c, response.Message_OK))) } // 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(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody))) } productID_attribute := c.Query("productID") productID, err := strconv.Atoi(productID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)). JSON(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } return c.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(c, response.Message_OK))) } // TranslateProductDescription returns translated product description func (h *ProductDescriptionHandler) TranslateProductDescription(c fiber.Ctx) error { userID, ok := c.Locals("userID").(uint) if !ok { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody))) } productID_attribute := c.Query("productID") productID, err := strconv.Atoi(productID_attribute) if err != nil { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)). JSON(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, 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(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute))) } aiModel := c.Query("model") if aiModel != "OpenAI" && aiModel != "Google" { return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute))) } description, err := h.productDescriptionService.TranslateProductDescription(userID, uint(productID), uint(productShopID), uint(productFromLangID), uint(productToLangID), aiModel) if err != nil { return c.Status(responseErrors.GetErrorStatus(err)). JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err))) } return c.JSON(response.Make(description, 1, i18n.T_(c, response.Message_OK))) }