163 lines
5.0 KiB
Go
163 lines
5.0 KiB
Go
package controller
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"simplycpq/models"
|
|
"simplycpq/services"
|
|
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type ProductGroupController struct {
|
|
productGroupService *services.ProductGroupService
|
|
valueService *services.ValueService
|
|
}
|
|
|
|
func NewProductGroupController(productGroupService *services.ProductGroupService, valueService *services.ValueService) *ProductGroupController {
|
|
return &ProductGroupController{
|
|
productGroupService: productGroupService,
|
|
valueService: valueService,
|
|
}
|
|
}
|
|
|
|
func (pgc *ProductGroupController) CreateProductGroup(c *gin.Context) {
|
|
var productGroup models.ProductGroup
|
|
if err := c.ShouldBindJSON(&productGroup); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
createdProductGroup, err := pgc.productGroupService.CreateProductGroup(&productGroup)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, createdProductGroup)
|
|
}
|
|
|
|
func (pgc *ProductGroupController) UpdateProductGroup(c *gin.Context) {
|
|
var productGroup models.ProductGroup
|
|
if err := c.ShouldBindJSON(&productGroup); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
updatedProductGroup, err := pgc.productGroupService.UpdateProductGroup(&productGroup)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, updatedProductGroup)
|
|
}
|
|
|
|
func (pgc *ProductGroupController) DeleteProductGroup(c *gin.Context) {
|
|
id, err := strconv.Atoi(c.Param("id"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid ID"})
|
|
return
|
|
}
|
|
err = pgc.productGroupService.DeleteProductGroup(id)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"message": "ProductGroup deleted successfully"})
|
|
}
|
|
|
|
func (pgc *ProductGroupController) GetProductGroup(c *gin.Context) {
|
|
id, err := strconv.Atoi(c.Param("id"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid ID"})
|
|
return
|
|
}
|
|
productGroup, err := pgc.productGroupService.GetProductGroup(id)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, productGroup)
|
|
}
|
|
|
|
func (pgc *ProductGroupController) GetProductGroupsByParentId(c *gin.Context) {
|
|
parentId, err := strconv.Atoi(c.Param("parentId"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid parent ID"})
|
|
return
|
|
}
|
|
productGroups, err := pgc.productGroupService.GetProductGroupsByParentId(parentId)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, productGroups)
|
|
}
|
|
|
|
func (pgc *ProductGroupController) DeleteProductFromProductGroupId(c *gin.Context) {
|
|
productId, err := strconv.Atoi(c.Param("productId"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product ID"})
|
|
return
|
|
}
|
|
err = pgc.productGroupService.DeleteProductFromProductGroupId(productId)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"message": "Product deleted from product group successfully"})
|
|
}
|
|
|
|
func (pgc *ProductGroupController) GetPropertiesFromProductGroupId(c *gin.Context) {
|
|
productGroupId, err := strconv.Atoi(c.Param("productGroupId"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product group ID"})
|
|
return
|
|
}
|
|
properties, err := pgc.productGroupService.GetPropertiesFromProductGroupId(productGroupId)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, properties)
|
|
}
|
|
|
|
func (pgc *ProductGroupController) DeletePropertyFromProductGroupId(c *gin.Context) {
|
|
propertyId, err := strconv.Atoi(c.Param("propertyId"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid property ID"})
|
|
return
|
|
}
|
|
productGroupId, err := strconv.Atoi(c.Param("productGroupId"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product group ID"})
|
|
return
|
|
}
|
|
err = pgc.productGroupService.DeletePropertyFromProductGroup(productGroupId, propertyId)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"message": "Property deleted from product group successfully"})
|
|
}
|
|
|
|
func (pgc *ProductGroupController) CreatePropertyToProductGroupId(c *gin.Context) {
|
|
var property models.Property
|
|
if err := c.ShouldBindJSON(&property); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
productGroupId, err := strconv.Atoi(c.Param("productGroupId"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product group ID"})
|
|
return
|
|
}
|
|
|
|
property2, err := pgc.productGroupService.CreatePropertyToProductGroupId(productGroupId, &property)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, property2)
|
|
}
|