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 }
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 }
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 }