78 lines
1.4 KiB
Go
78 lines
1.4 KiB
Go
package produce
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/davidlick/supermarket-api/internal/interfaces"
|
|
"github.com/davidlick/supermarket-api/pkg/ramdb"
|
|
)
|
|
|
|
type service struct {
|
|
db interfaces.RamDB
|
|
}
|
|
|
|
// NewService creates a new produce service for storing produce items.
|
|
func NewService(db interfaces.RamDB) *service {
|
|
return &service{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
// Add adds the Items to the database.
|
|
func (s *service) Add(items []Item) error {
|
|
for _, item := range items {
|
|
rec, err := ramdb.NewRecord(strings.ToLower(item.Code), KeyProduceCode, item)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = s.db.Insert(rec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Remove removes the item from the database.
|
|
func (s *service) Remove(item Item) error {
|
|
rec, err := ramdb.NewRecord(strings.ToLower(item.Code), KeyProduceCode, item)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return s.db.Delete(rec)
|
|
}
|
|
|
|
// Get fetches the produceCode from the database.
|
|
func (s *service) Get(produceCode string) (item Item, err error) {
|
|
rec, err := s.db.Get(KeyProduceCode, strings.ToLower(produceCode))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = rec.Deserialize(&item)
|
|
return
|
|
}
|
|
|
|
// All returns all produce items stored in the database.
|
|
func (s *service) All() (items []Item, err error) {
|
|
recs, err := s.db.Select(KeyProduceCode)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for _, rec := range recs {
|
|
var item Item
|
|
err = rec.Deserialize(&item)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
items = append(items, item)
|
|
}
|
|
|
|
return
|
|
}
|