Product API
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user