diff --git a/buildtime/cmd/main.go b/buildtime/cmd/main.go index 8aef96a..330f2d2 100644 --- a/buildtime/cmd/main.go +++ b/buildtime/cmd/main.go @@ -10,7 +10,7 @@ import ( ) func main() { - log.Println("Starting XCPQ Editor Service") + log.Println("Starting SimplyCPQ Editor Services") log.Println("Reading configuration") config := config.InitConfig("config") log.Println("Initializing database") @@ -19,5 +19,5 @@ func main() { httpServer := server.InitHttpServer(config, dbHandler) httpServer.Start() - log.Println("XCPQ Editor Service Stopped") + log.Println("SimplyCPQ Editor Services Stopped") } diff --git a/buildtime/cmd/server/httpServer.go b/buildtime/cmd/server/httpServer.go index 032a1c3..a43af65 100644 --- a/buildtime/cmd/server/httpServer.go +++ b/buildtime/cmd/server/httpServer.go @@ -56,7 +56,7 @@ func InitHttpServer(config *viper.Viper, dbHandler *sql.DB) HttpServer { // static content router.Static("/static", "../static") router.GET("/", mainHandler.Home) - router.GET("/properties/rootnodes", propertyTypeHandler.GetRootPropertyTypeGroups) + router.GET("/properties/:id/childs", propertyTypeHandler.GetPropertyTypeGroupContentById) //router.GET("/properties", handler.PropertiesHandler) /* old routes diff --git a/buildtime/internal/handler/propertyTypeHandler.go b/buildtime/internal/handler/propertyTypeHandler.go index 142504b..e072b29 100644 --- a/buildtime/internal/handler/propertyTypeHandler.go +++ b/buildtime/internal/handler/propertyTypeHandler.go @@ -2,6 +2,7 @@ package handlers import ( "SimplyCPQ2/internal/services" + "strconv" "github.com/gin-gonic/gin" ) @@ -16,6 +17,40 @@ func NewPropertyTypeHandler(propertyTypeService *services.PropertyTypeService) * } } +// Dummy Methode func (h *PropertyTypeHandler) GetRootPropertyTypeGroups(ctx *gin.Context) { // Implement the logic to get root property types groups here } + +func (h *PropertyTypeHandler) GetPropertyTypeGroupContentById(ctx *gin.Context) { + idParam := ctx.Param("id") + // Convert idParam to an integer + id, err := strconv.Atoi(idParam) + if err != nil { + ctx.JSON(400, gin.H{"error": "Invalid ID"}) + return + } + + // get property type groups by parent ID + ptgs, err := h.propertyTypeService.GetPropertyTypeGroupsByParentId(id) + if err != nil { + ctx.JSON(500, gin.H{"error": "Failed to get property type group content"}) + return + } + + // get property types by parent ID + pts, err := h.propertyTypeService.GetPropertyTypesByGroupId(id) + if err != nil { + ctx.JSON(500, gin.H{"error": "Failed to get property types"}) + return + } + + // template for response + + ctx.JSON(200, gin.H{ + "propertyTypeGroups": ptgs, + "propertyTypes": pts, + }) + + // Implement the logic to get property type group content by ID here using idParam +} diff --git a/buildtime/internal/repositories/propertyRepository.go b/buildtime/internal/repositories/propertyRepository.go index 01ba48c..bda2728 100644 --- a/buildtime/internal/repositories/propertyRepository.go +++ b/buildtime/internal/repositories/propertyRepository.go @@ -128,10 +128,10 @@ func (r *PropertyRepository) GetPropertiesByParentPropertyID(pid int) ([]models. return properties, nil } -func (r *PropertyRepository) GetPropertiesByPropertyTypeID(pid int) ([]models.Property, error) { +func (r *PropertyRepository) GetPropertyByPropertyTypeID(pid int) (models.Property, error) { rows, err := r.db.Query("SELECT id, name, description, image_url, parent_property_id, property_type_id, product_groups_id, products_id FROM properties WHERE property_type_id = ?", pid) if err != nil { - return nil, err + return models.Property{}, err } defer rows.Close() @@ -140,7 +140,7 @@ func (r *PropertyRepository) GetPropertiesByPropertyTypeID(pid int) ([]models.Pr var property models.Property err := rows.Scan(&property.Id, &property.Name, &property.Description, &property.ImageURL, &property.ParentPropertyId, &property.PropertyTypeId, &property.ProductGroupId, &property.ProductId) if err != nil { - return nil, err + return models.Property{}, err } if cachedProperty, ok := r.cache[property.Id]; ok { properties = append(properties, cachedProperty) @@ -150,7 +150,10 @@ func (r *PropertyRepository) GetPropertiesByPropertyTypeID(pid int) ([]models.Pr } } if err := rows.Err(); err != nil { - return nil, err + return models.Property{}, err } - return properties, nil + if len(properties) == 0 { + return models.Property{}, nil + } + return properties[0], nil } diff --git a/buildtime/internal/repositories/propertyTypeGroupRepository.go b/buildtime/internal/repositories/propertyTypeGroupRepository.go index bf6f36f..819cd43 100644 --- a/buildtime/internal/repositories/propertyTypeGroupRepository.go +++ b/buildtime/internal/repositories/propertyTypeGroupRepository.go @@ -33,6 +33,32 @@ func (r *PropertyTypeGroupRepository) GetPropertyTypeGroupByID(id int) (models.P return value, nil } +func (r *PropertyTypeGroupRepository) GetPropertyTypesByGroupId(gid int) ([]models.PropertyTypeGroup, error) { + rows, err := r.db.Query("SELECT id, name, description, parenz_property_typw_goup_id, image_url FROM property_type_groups WHERE parenz_property_typw_goup_id = ?", gid) + if err != nil { + return nil, err + } + defer rows.Close() + + var groups []models.PropertyTypeGroup + for rows.Next() { + var value models.PropertyTypeGroup + err := rows.Scan(&value.Id, &value.Name, &value.Description, &value.ParentPropertyTypeGroupId, &value.ImageURL) + if err != nil { + return nil, err + } + if _, ok := r.cache[value.Id]; !ok { + r.cache[value.Id] = value + } + + groups = append(groups, value) + } + if err = rows.Err(); err != nil { + return nil, err + } + return groups, nil +} + func (r *PropertyTypeGroupRepository) CreatePropertyTypeGroup(value models.PropertyTypeGroup) (models.PropertyTypeGroup, error) { result, err := r.db.Exec("INSERT INTO property_type_groups (name) VALUES (?)", value.Name) if err != nil { diff --git a/buildtime/internal/services/propertyTypeService.go b/buildtime/internal/services/propertyTypeService.go index a5cd082..fb4c36c 100644 --- a/buildtime/internal/services/propertyTypeService.go +++ b/buildtime/internal/services/propertyTypeService.go @@ -1,18 +1,41 @@ package services import ( + "SimplyCPQ2/internal/models" "SimplyCPQ2/internal/repositories" ) type PropertyTypeService struct { // Add any dependencies or fields needed for the service here + values_Repository *repositories.ValueRepository + Property_Repository *repositories.PropertyRepository PropertyTypes_Repository *repositories.PropertyTypeRepository PropertyTypeGroups_Repository *repositories.PropertyTypeGroupRepository } -func NewPropertyTypeService(propertyTypesRepo *repositories.PropertyTypeRepository, propertyTypesGroupsRepo *repositories.PropertyTypeGroupRepository) *PropertyTypeService { +func NewPropertyTypeService(propertyRepo *repositories.PropertyRepository, propertyTypesRepo *repositories.PropertyTypeRepository, propertyTypesGroupsRepo *repositories.PropertyTypeGroupRepository, valuesRepo *repositories.ValueRepository) *PropertyTypeService { return &PropertyTypeService{ + Property_Repository: propertyRepo, PropertyTypes_Repository: propertyTypesRepo, PropertyTypeGroups_Repository: propertyTypesGroupsRepo, + values_Repository: valuesRepo, } } + +// Getter functions + +func (service *PropertyTypeService) GetPropertyTypeGroupsByParentId(parentId int) ([]models.PropertyTypeGroup, error) { + return service.PropertyTypeGroups_Repository.GetPropertyTypesByGroupId(parentId) +} + +func (service *PropertyTypeService) GetPropertyTypesByGroupId(id int) ([]models.PropertyType, error) { + return service.PropertyTypes_Repository.GetPropertyTypesByGroupID(id) +} + +func (service *PropertyTypeService) GetPropertyByTypeId(id int) (models.Property, error) { + return service.Property_Repository.GetPropertyByPropertyTypeID(id) +} + +func (service *PropertyTypeService) GetValuesByPropertyId(id int) ([]models.Value, error) { + return service.values_Repository.GetValuesByPropertyId(id) +} diff --git a/buildtime/templates/pages/index copy.html b/buildtime/templates/pages/index copy.html new file mode 100644 index 0000000..b85fa6a --- /dev/null +++ b/buildtime/templates/pages/index copy.html @@ -0,0 +1,157 @@ + + + + + + + + + + Simply CPQ Material Editor V2 + + +
+
+

Simply CPQ Material Editor V2

+
+
+
+ +
+
+

Property-Type Group

+
+
+
+ + + + + + +
+ + + +
+
+
+
+
+
+
+

Values für {PropertyTypeName}

+
+
+ + + + + + + + + + + + + + + + + + + +
IDValueDescriptionActions
1Value 1Description 1 +
+ + +
+
2Value 2Description 2 +
+ + +
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/buildtime/templates/pages/index.html b/buildtime/templates/pages/index.html index b85fa6a..2a1eafa 100644 --- a/buildtime/templates/pages/index.html +++ b/buildtime/templates/pages/index.html @@ -7,6 +7,7 @@ + Simply CPQ Material Editor V2 @@ -19,15 +20,13 @@