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[string]*item.Item } // NewItem returns the item service implementation. func NewItem(logger *log.Logger) item.Service { itemsMap := make(map[string]*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.Name] if itemToGet == nil { s.logger.Printf("item with id %d not found", &p.Name) return nil, errors.New("item not found") } res = s.items[*p.Name] return } func (s *itemsrvc) ListItems(ctx context.Context, payload *item.ListItemsPayload) (res []*item.Item, err error) { if payload.NameFilter != nil { for _, value := range payload.NameFilter { res = append(res, s.items[value]) } } else { for _, value := range s.items { res = append(res, value) } } return } // CreateItem implements createItem. func (s *itemsrvc) CreateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) { s.logger.Print("item.createItem") name := p.Name s.items[name] = p res = s.items[name] 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.Name] if itemToUpdate == nil { s.logger.Printf("item with id %d not found", &p.Name) return nil, errors.New("item not found") } s.items[p.Name] = p res = s.items[p.Name] 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.Name] if itemToDelete == nil { s.logger.Printf("item with id %d not found", &p.Name) return errors.New("item not found") } delete(s.items, *p.Name) return }