Files
crossnokaye-interview-assig…/services/item/item.go
2023-08-14 16:26:34 -05:00

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
}