Files
2026-08-17 20:12:24 +02:00

167 lines
5.4 KiB
Go

package controller
import (
"log"
"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, gin.H{"message": "ProductGroup created", "data": 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, gin.H{"message": "ProductGroup updated", "data": 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, gin.H{"message": "ProductGroup retrieved", "data": 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, gin.H{"message": "ProductGroups retrieved", "data": productGroups})
}
func (pgc *ProductGroupController) DeleteProductFromProductGroupId(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
}
err = pgc.productGroupService.DeleteProductFromProductGroupId(productGroupId)
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, gin.H{"message": "Properties retrieved", "data": 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) {
productGroupId, err := strconv.Atoi(c.Param("productGroupId"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid product group ID"})
return
}
log.Println("ProductGroupId:", productGroupId)
log.Println("PropertyTypeId:", c.Param("propertyTypeId"))
propertyTypeId, err := strconv.Atoi(c.Param("propertyTypeId"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid property type ID"})
return
}
property, err := pgc.valueService.CreatePropertyFromPropertyTypeId(propertyTypeId, productGroupId, 0)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "Property created", "data": property})
}