84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
package itemapi
|
|
|
|
import (
|
|
"context"
|
|
item "crossnokaye-interview-assignment/services/item/gen/item"
|
|
"errors"
|
|
"log"
|
|
)
|
|
|
|
// item service example implementation.
|
|
// The example methods log the requests and return zero values.
|
|
type itemsrvc struct {
|
|
logger *log.Logger
|
|
items map[int]*item.Item
|
|
}
|
|
|
|
// NewItem returns the item service implementation.
|
|
func NewItem(logger *log.Logger) item.Service {
|
|
itemsMap := make(map[int]*item.Item)
|
|
return &itemsrvc{logger, itemsMap}
|
|
}
|
|
|
|
// GetItem implements getItem.
|
|
func (s *itemsrvc) GetItem(ctx context.Context, p *item.GetItemPayload) (res *item.Item, err error) {
|
|
s.logger.Print("itemToGet.getItem")
|
|
|
|
itemToGet := s.items[*p.ID]
|
|
if itemToGet == nil {
|
|
s.logger.Printf("itemToGet with id %d not found", p.ID)
|
|
return nil, errors.New("item not found")
|
|
}
|
|
res = s.items[*p.ID]
|
|
|
|
return
|
|
}
|
|
|
|
// CreateItem implements createItem.
|
|
func (s *itemsrvc) CreateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) {
|
|
s.logger.Print("item.createItem")
|
|
id := -1
|
|
|
|
// Using this method of assigning IDs means they will
|
|
// potentially be non-sequential if ids are deleted
|
|
if p.ID != nil {
|
|
id = *p.ID
|
|
} else {
|
|
id = len(s.items)
|
|
}
|
|
|
|
p.ID = &id
|
|
s.items[id] = p
|
|
res = s.items[id]
|
|
|
|
return
|
|
}
|
|
|
|
// UpdateItem implements updateItem.
|
|
func (s *itemsrvc) UpdateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) {
|
|
s.logger.Print("itemToGet.updateItem")
|
|
itemToUpdate := s.items[*p.ID]
|
|
if itemToUpdate == nil {
|
|
s.logger.Printf("itemToGet with id %d not found", p.ID)
|
|
return nil, errors.New("item not found")
|
|
}
|
|
s.items[*p.ID] = p
|
|
res = s.items[*p.ID]
|
|
|
|
return
|
|
}
|
|
|
|
// DeleteItem implements deleteItem.
|
|
func (s *itemsrvc) DeleteItem(ctx context.Context, p *item.DeleteItemPayload) (err error) {
|
|
s.logger.Print("item.deleteItem")
|
|
itemToDelete := s.items[*p.ID]
|
|
if itemToDelete == nil {
|
|
s.logger.Printf("itemToGet with id %d not found", p.ID)
|
|
return errors.New("item not found")
|
|
}
|
|
|
|
delete(s.items, *p.ID)
|
|
|
|
return
|
|
}
|