Пример #1
0
func (engine *Engine) ListProducts(limit uint64, offset uint64) ([]data.Product, error) {

	if limit < 1 {
		return nil, ErrEmptyLimit
	}

	tx, err := engine.storage.Begin()
	if err != nil {
		return nil, err
	}

	products, err := tx.ListProducts(limit, offset)
	if err != nil {
		return nil, tx.Rollback(err)
	}

	for i, product := range products {
		populate.Product(&product)
		products[i] = product
	}

	if err := tx.Commit(); err != nil {
		return nil, err
	}

	return products, nil
}
Пример #2
0
func (engine *Engine) UpdateProduct(product *data.Product) error {

	if product.ID == 0 {
		return ErrEmptyID
	}

	if !nameRegexp.MatchString(product.Name) {
		return ErrInvalidName
	}

	if product.Price.Net < 1 {
		return ErrInvalidNetPrice
	}

	tx, err := engine.storage.Begin()
	if err != nil {
		return err
	}

	if err := tx.UpdateProduct(product); err != nil {
		return tx.Rollback(err)
	}

	populate.Product(product)

	if err := tx.Commit(); err != nil {
		return err
	}

	return nil
}
Пример #3
0
func (engine *Engine) LoadProduct(product *data.Product) error {

	if product.ID == 0 {
		return ErrEmptyID
	}

	tx, err := engine.storage.Begin()
	if err != nil {
		return err
	}

	if err := tx.LoadProduct(product); err != nil {
		return tx.Rollback(err)
	}

	populate.Product(product)

	if err := tx.Commit(); err != nil {
		return err
	}

	return nil
}