fix in the product import
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
@@ -691,3 +692,64 @@ func (ctl *ProductController) DeleteProductLocation(c *fiber.Ctx) error {
|
||||
"status": true,
|
||||
})
|
||||
}
|
||||
|
||||
// PublishProduct releases a product from the admin catalogue to every outlet.
|
||||
//
|
||||
// The two rules this enforces — a price is required, and publishing covers the
|
||||
// whole tenant — live in the repository, so they hold for any caller rather
|
||||
// than only for the console form that happens to ask nicely.
|
||||
func (ctl *ProductController) PublishProduct(c *fiber.Ctx) error {
|
||||
var input struct {
|
||||
Tenantid int `json:"tenantid"`
|
||||
Productid int `json:"productid"`
|
||||
Price float64 `json:"price"`
|
||||
}
|
||||
|
||||
if err := c.BodyParser(&input); err != nil {
|
||||
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
||||
"code": http.StatusBadRequest, "message": "Invalid request body", "status": false,
|
||||
})
|
||||
}
|
||||
|
||||
outlets, err := ctl.productService.PublishProduct(input.Tenantid, input.Productid, input.Price)
|
||||
if err != nil {
|
||||
// 400 rather than 500: every failure here is something the caller can
|
||||
// act on — no price, no outlets, or a product that is not theirs.
|
||||
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
||||
"code": http.StatusBadRequest, "message": err.Error(), "status": false,
|
||||
})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{
|
||||
"code": http.StatusOK, "status": true,
|
||||
"message": fmt.Sprintf("Published to %d outlet(s)", outlets),
|
||||
"details": fiber.Map{"productid": input.Productid, "outlets": outlets},
|
||||
})
|
||||
}
|
||||
|
||||
// UnpublishProduct withdraws a product from every shop, keeping its rows.
|
||||
func (ctl *ProductController) UnpublishProduct(c *fiber.Ctx) error {
|
||||
var input struct {
|
||||
Tenantid int `json:"tenantid"`
|
||||
Productid int `json:"productid"`
|
||||
}
|
||||
|
||||
if err := c.BodyParser(&input); err != nil {
|
||||
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
||||
"code": http.StatusBadRequest, "message": "Invalid request body", "status": false,
|
||||
})
|
||||
}
|
||||
|
||||
outlets, err := ctl.productService.UnpublishProduct(input.Tenantid, input.Productid)
|
||||
if err != nil {
|
||||
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
|
||||
"code": http.StatusBadRequest, "message": err.Error(), "status": false,
|
||||
})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{
|
||||
"code": http.StatusOK, "status": true,
|
||||
"message": fmt.Sprintf("Withdrawn from %d outlet(s)", outlets),
|
||||
"details": fiber.Map{"productid": input.Productid, "outlets": outlets},
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user