174 lines
7.5 KiB
Go
174 lines
7.5 KiB
Go
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)))
|
|
}
|