diff --git a/buildtime/database/.$BOMStructure.bkp b/buildtime/database/.$BOMStructure.bkp
new file mode 100644
index 000000000..a76518626
--- /dev/null
+++ b/buildtime/database/.$BOMStructure.bkp
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/buildtime/database/BOMStructure b/buildtime/database/BOMStructure
new file mode 100644
index 000000000..66d236945
--- /dev/null
+++ b/buildtime/database/BOMStructure
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/buildtime/server/controller/bomController.go b/buildtime/server/controller/bomController.go
index 9389b552d..678ba90e9 100644
--- a/buildtime/server/controller/bomController.go
+++ b/buildtime/server/controller/bomController.go
@@ -11,10 +11,10 @@ import (
)
type BOMController struct {
- bomService *services.BOMService
+ bomService *services.BomService
}
-func NewBOMController(b *services.BOMService) *BOMController {
+func NewBOMController(b *services.BomService) *BOMController {
return &BOMController{
bomService: b,
}
@@ -72,7 +72,7 @@ func (bc *BOMController) CreateVariantNode(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
- err = bc.bomService.CreateVariantNode(&variantNode)
+ _, err = bc.bomService.CreateVariantNode(&variantNode)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
@@ -117,7 +117,7 @@ func (bc *BOMController) GetVariantNode(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
- variantNode, err := bc.bomService.GetVariantNodeById(variantNodeId)
+ variantNode, err := bc.bomService.GetVariantNode(variantNodeId)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
diff --git a/buildtime/server/services/bomService.go b/buildtime/server/services/bomService.go
new file mode 100644
index 000000000..f21d667c8
--- /dev/null
+++ b/buildtime/server/services/bomService.go
@@ -0,0 +1,133 @@
+package services
+
+import (
+ "fmt"
+ "simplycpq/models"
+ "simplycpq/repositories"
+)
+
+type BomService struct {
+ bomRepository *repositories.BomRepository
+}
+
+func NewBomService(bomRepo *repositories.BomRepository) *BomService {
+ return &BomService{
+ bomRepository: bomRepo,
+ }
+}
+
+func (bs *BomService) GetBOMByProductID(productID int) ([]models.BillOfMaterial, error) {
+ bomData, err := bs.bomRepository.GetBOMByProductID(productID)
+ if err != nil {
+ return nil, fmt.Errorf("failed to retrieve BOM data: %w", err)
+ }
+ return bomData, nil
+}
+
+func (bs *BomService) CreateBillOfMaterial(bom *models.BillOfMaterial) error {
+ // Validate the BOM data
+ if bom.ProductID <= 0 {
+ return fmt.Errorf("invalid product ID")
+ }
+
+ // Create the BOM in the repository
+ err := bs.bomRepository.CreateBillOfMaterial(bom)
+ if err != nil {
+ return fmt.Errorf("failed to create BOM: %w", err)
+ }
+ return nil
+}
+
+func (bs *BomService) GetBOMProductsByBOMId(bomId int64) ([]models.Product, error) {
+ products, err := bs.bomRepository.GetBOMProductsByBOMId(bomId)
+ if err != nil {
+ return nil, fmt.Errorf("failed to retrieve BOM products: %w", err)
+ }
+ return products, nil
+}
+
+func (bs *BomService) GetBOMVariantNodesByBOMId(bomId int64) ([]models.VariantNode, error) {
+ variantNodes, err := bs.bomRepository.GetBOMVariantNodesByBOMId(bomId)
+ if err != nil {
+ return nil, fmt.Errorf("failed to retrieve BOM variant nodes: %w", err)
+ }
+ return variantNodes, nil
+}
+
+func (bs *BomService) CreateVariantNode(variantNode *models.VariantNode) (*models.VariantNode, error) {
+
+ // Create the VariantNode in the repository
+ variantNode, err := bs.bomRepository.CreateVariantNode(variantNode)
+ if err != nil {
+ return nil, fmt.Errorf("failed to create VariantNode: %w", err)
+ }
+ return variantNode, nil
+}
+
+func (bs *BomService) GetVariantNodeByID(id int64) (*models.VariantNode, error) {
+ variantNode, err := bs.bomRepository.GetVariantNodeByID(id)
+ if err != nil {
+ return nil, fmt.Errorf("failed to retrieve VariantNode: %w", err)
+ }
+ return variantNode, nil
+}
+
+func (bs *BomService) UpdateVariantNode(variantNode *models.VariantNode) error {
+ // Update the VariantNode in the repository
+ err := bs.bomRepository.UpdateVariantNode(variantNode)
+ if err != nil {
+ return fmt.Errorf("failed to update VariantNode: %w", err)
+ }
+ return nil
+}
+
+func (bs *BomService) DeleteVariantNode(id int64) error {
+ // Delete the VariantNode in the repository
+ err := bs.bomRepository.DeleteVariantNode(id)
+ if err != nil {
+ return fmt.Errorf("failed to delete VariantNode: %w", err)
+ }
+ return nil
+}
+
+func (bs *BomService) GetVariantNode(parentID int64) ([]models.VariantNode, error) {
+ variantNodes, err := bs.bomRepository.GetVariantNode(parentID)
+ if err != nil {
+ return nil, fmt.Errorf("failed to retrieve VariantNodes: %w", err)
+ }
+ return variantNodes, nil
+}
+
+func (bs *BomService) GetVariantNodeProductsByVariantNodeId(parentID int64) ([]models.Product, error) {
+ products, err := bs.bomRepository.GetVariantNodeProductsByVariantNodeId(parentID)
+ if err != nil {
+ return nil, fmt.Errorf("failed to retrieve VariantNode products: %w", err)
+ }
+ return products, nil
+}
+
+func (bs *BomService) UpdateBillOfMaterial(bom *models.BillOfMaterial) error {
+ // Update the BOM in the repository
+ err := bs.bomRepository.UpdateBillOfMaterial(bom)
+ if err != nil {
+ return fmt.Errorf("failed to update BOM: %w", err)
+ }
+ return nil
+}
+
+func (bs *BomService) DeleteBillOfMaterial(id int64) error {
+ // Delete the BOM in the repository
+ err := bs.bomRepository.DeleteBillOfMaterial(id)
+ if err != nil {
+ return fmt.Errorf("failed to delete BOM: %w", err)
+ }
+ return nil
+}
+
+func (bs *BomService) GetBillOfMaterial(id int64) (*models.BillOfMaterial, error) {
+ bom, err := bs.bomRepository.GetBillOfMaterial(id)
+ if err != nil {
+ return nil, fmt.Errorf("failed to retrieve BOM: %w", err)
+ }
+ return bom, nil
+}