Product API

This commit is contained in:
2026-08-10 22:59:43 +02:00
parent 0b84803f5e
commit 09e3fa7516
108 changed files with 94569 additions and 8 deletions
@@ -9,14 +9,16 @@ import (
)
type ProductgroupRepository struct {
dbHandler *sql.DB
m map[int]*models.Productgroup
dbHandler *sql.DB
propertyTypesRepository *PropertyTypesRepository
m map[int]*models.Productgroup
}
func NewProductgroupRepository(dbHandler *sql.DB) *ProductgroupRepository {
func NewProductgroupRepository(dbHandler *sql.DB, propertyTypesRepository *PropertyTypesRepository) *ProductgroupRepository {
return &ProductgroupRepository{
dbHandler: dbHandler,
m: make(map[int]*models.Productgroup),
dbHandler: dbHandler,
propertyTypesRepository: NewPropertyTypesRepository(dbHandler),
m: make(map[int]*models.Productgroup),
}
}
@@ -203,20 +205,72 @@ func (rr ProductgroupRepository) GetProductgroup(ProductgroupId int) (*models.Pr
}
// get property types of this product group
ptr := NewPropertyTypesRepository{dbHandler: rr.dbHandler}
propertyTypes, err3 := ptr.GetPropertyTypesByProductGroupID(pg.ID)
propertyTypes, err3 := rr.GetPropertyTypesByProductGroupID(pg.ID)
if err3 != nil {
return nil, &models.ResponseError{
Message: err3.Error(),
Status: http.StatusInternalServerError,
}
}
pg.PropertyTypes = propertyTypes
for _, pt := range propertyTypes {
pg.PropertyTypes = append(pg.PropertyTypes, *pt)
}
// TODO: get products of this product group
rr.m[pg.ID] = pg
return pg, nil
}
func (rr ProductgroupRepository) GetPropertyTypesByProductGroupID(productGroupID int) ([]*models.PropertyType, *models.ResponseError) {
var propertyTypes []*models.PropertyType
query := `SELECT property_type_id FROM product_group_property_types_list WHERE product_group_id=$1`
rows, err := rr.dbHandler.Query(query, productGroupID)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
defer rows.Close()
var idstr string
for rows.Next() {
err := rows.Scan(&idstr)
if err != nil {
return nil, &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
id, err := strconv.Atoi(idstr)
if err != nil {
return nil, &models.ResponseError{
Message: "PropertyType id not int " + idstr,
Status: http.StatusInternalServerError,
}
}
pt, err2 := rr.propertyTypesRepository.GetPropertyType(id)
if err2 != nil {
return nil, &models.ResponseError{
Message: "PropertyType not found with the given id " + idstr,
Status: http.StatusInternalServerError,
}
}
if pt != nil {
propertyTypes = append(propertyTypes, pt)
}
}
if rows.Err() != nil {
return nil, &models.ResponseError{
Message: rows.Err().Error(),
Status: http.StatusInternalServerError,
}
}
return propertyTypes, nil
}
func (rr ProductgroupRepository) GetSubProductgroups(ProductgroupId int) ([]*models.Productgroup, *models.ResponseError) {
var Productgroups []*models.Productgroup
query := `SELECT id FROM product_groups WHERE parent_product_group_id=$1`
@@ -317,3 +371,24 @@ func (rr ProductgroupRepository) GetAllProductgroups() ([]*models.Productgroup,
}
return Productgroups, nil
}
func (rr ProductgroupRepository) addToParentProductGroup(ProductGroup *models.Productgroup) *models.ResponseError {
Query := `UPDATE product_groups SET parent_group_id=$1 WHERE id=$2`
_, err := rr.dbHandler.Exec(Query, ProductGroup.ParentProductGroupID, ProductGroup.ID)
if err != nil {
return &models.ResponseError{
Message: err.Error(),
Status: http.StatusInternalServerError,
}
}
ParentProductGroup, err2 := rr.GetProductgroup(ProductGroup.ParentProductGroupID)
if err2 != nil {
return &models.ResponseError{
Message: "Parent Productgroup not found with the given id " + strconv.Itoa(ProductGroup.ParentGroupID),
Status: http.StatusInternalServerError,
}
}
ParentProductGroup.ChildProductGroups = append(ParentProductGroup.ChildProductGroups, *ProductGroup)
rr.m[ParentProductGroup.ID] = ParentProductGroup
return nil
}