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) }