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 = p 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 = itemToUpdate 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 }