diff --git a/services/character/character.go b/services/character/character.go index 4f64ceb..c946879 100644 --- a/services/character/character.go +++ b/services/character/character.go @@ -11,31 +11,31 @@ import ( // The example methods log the requests and return zero values. type charactersrvc struct { logger *log.Logger - characters map[string]*character.Character + characters *map[string]*character.Character } // NewCharacter returns the character service implementation. func NewCharacter(logger *log.Logger) character.Service { characterMap := make(map[string]*character.Character) - return &charactersrvc{logger, characterMap} + return &charactersrvc{logger, &characterMap} } // GetCharacter implements getCharacter. func (s *charactersrvc) GetCharacter(ctx context.Context, p *character.GetCharacterPayload) (res *character.Character, err error) { s.logger.Print("character.getCharacter") - itemToGet := s.characters[*p.Name] + itemToGet := (*s.characters)[*p.Name] if itemToGet == nil { s.logger.Printf("character with id %d not found", &p.Name) return nil, errors.New("character not found") } - res = s.characters[*p.Name] + res = (*s.characters)[*p.Name] return } func (s *charactersrvc) ListCharacters(ctx context.Context) (res []*character.Character, err error) { - for _, value := range s.characters { + for _, value := range *s.characters { res = append(res, value) } return @@ -44,8 +44,15 @@ func (s *charactersrvc) ListCharacters(ctx context.Context) (res []*character.Ch // CreateCharacter implements createCharacter. func (s *charactersrvc) CreateCharacter(ctx context.Context, p *character.Character) (res *character.Character, err error) { s.logger.Print("character.createCharacter") - s.characters[p.Name] = p - res = s.characters[p.Name] + + existingCharacter := (*s.characters)[p.Name] + if existingCharacter != nil { + s.logger.Printf("character with name %d already exists", &p.Name) + return nil, errors.New("character already exists") + } + + (*s.characters)[p.Name] = p + res = (*s.characters)[p.Name] return } @@ -53,13 +60,13 @@ func (s *charactersrvc) CreateCharacter(ctx context.Context, p *character.Charac func (s *charactersrvc) UpdateCharacter(ctx context.Context, p *character.Character) (res *character.Character, err error) { s.logger.Print("character.updateCharacter") - itemToUpdate := s.characters[p.Name] + itemToUpdate := (*s.characters)[p.Name] if itemToUpdate == nil { s.logger.Printf("characters with id %d not found", &p.Name) return nil, errors.New("characters not found") } - s.characters[p.Name] = p - res = s.characters[p.Name] + (*s.characters)[p.Name] = p + res = (*s.characters)[p.Name] return } @@ -68,13 +75,13 @@ func (s *charactersrvc) UpdateCharacter(ctx context.Context, p *character.Charac func (s *charactersrvc) DeleteCharacter(ctx context.Context, p *character.DeleteCharacterPayload) (err error) { s.logger.Print("character.deleteCharacter") - itemToDelete := s.characters[*p.Name] + itemToDelete := (*s.characters)[*p.Name] if itemToDelete == nil { s.logger.Printf("characters with id %d not found", &p.Name) return errors.New("characters not found") } - delete(s.characters, *p.Name) + delete((*s.characters), *p.Name) return } diff --git a/services/inventory/inventory.go b/services/inventory/inventory.go index bb6d67c..8b59102 100644 --- a/services/inventory/inventory.go +++ b/services/inventory/inventory.go @@ -11,25 +11,25 @@ import ( // The example methods log the requests and return zero values. type inventorysrvc struct { logger *log.Logger - inventories map[string]*[]string //key = characterId, value = array of itemIds + inventories *map[string]*[]string //key = characterId, value = array of itemIds } // NewInventory returns the inventory service implementation. func NewInventory(logger *log.Logger) inventory.Service { inventoryMap := make(map[string]*[]string) - return &inventorysrvc{logger, inventoryMap} + return &inventorysrvc{logger, &inventoryMap} } // AddItem implements addItem. func (s *inventorysrvc) AddItem(ctx context.Context, p *inventory.InventoryRecord) (err error) { s.logger.Print("inventory.addItem") - itemList := s.inventories[p.CharacterName] + itemList := (*s.inventories)[p.CharacterName] if itemList == nil { itemList = s.initCharacterInventory(p.CharacterName) } newItemList := append(*itemList, p.ItemName) - s.inventories[p.CharacterName] = &newItemList + (*s.inventories)[p.CharacterName] = &newItemList return } @@ -38,7 +38,7 @@ func (s *inventorysrvc) AddItem(ctx context.Context, p *inventory.InventoryRecor func (s *inventorysrvc) RemoveItem(ctx context.Context, p *inventory.InventoryRecord) (err error) { s.logger.Print("inventory.removeItem") - itemList := s.inventories[p.CharacterName] + itemList := (*s.inventories)[p.CharacterName] if itemList == nil { s.logger.Printf("inventory for character with id %d not found", p.CharacterName) return errors.New("item not found") @@ -47,7 +47,7 @@ func (s *inventorysrvc) RemoveItem(ctx context.Context, p *inventory.InventoryRe idx := indexOf(p.ItemName, *itemList) if idx != -1 { newItemList := remove(*itemList, idx) - s.inventories[p.CharacterName] = &newItemList + (*s.inventories)[p.CharacterName] = &newItemList } else { s.logger.Printf("character with id %d does not have item %d in inventory", p.CharacterName, p.ItemName) return errors.New("item not found for character") @@ -57,10 +57,10 @@ func (s *inventorysrvc) RemoveItem(ctx context.Context, p *inventory.InventoryRe } func (s *inventorysrvc) ListInventory(ctx context.Context, payload *inventory.ListInventoryPayload) (res []string, err error) { - if s.inventories[*payload.CharacterName] == nil { + if (*s.inventories)[*payload.CharacterName] == nil { return nil, nil } - res = *s.inventories[*payload.CharacterName] + res = *((*s.inventories)[*payload.CharacterName]) return } @@ -68,7 +68,7 @@ func (s *inventorysrvc) ListInventory(ctx context.Context, payload *inventory.Li func (s *inventorysrvc) initCharacterInventory(characterName string) (itemList *[]string) { list := make([]string, 0) itemList = &list - s.inventories[characterName] = itemList + (*s.inventories)[characterName] = itemList return } diff --git a/services/item/item.go b/services/item/item.go index bf0d040..e5ad8e7 100644 --- a/services/item/item.go +++ b/services/item/item.go @@ -11,25 +11,25 @@ import ( // The example methods log the requests and return zero values. type itemsrvc struct { logger *log.Logger - items map[string]*item.Item + 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} + 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] + 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] + res = (*s.items)[*p.Name] return } @@ -37,10 +37,10 @@ func (s *itemsrvc) GetItem(ctx context.Context, p *item.GetItemPayload) (res *it 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]) + res = append(res, (*s.items)[value]) } } else { - for _, value := range s.items { + for _, value := range *s.items { res = append(res, value) } } @@ -53,8 +53,14 @@ func (s *itemsrvc) CreateItem(ctx context.Context, p *item.Item) (res *item.Item s.logger.Print("item.createItem") name := p.Name - s.items[name] = p - res = s.items[name] + existingItem := (*s.items)[name] + if existingItem != nil { + s.logger.Printf("item with name %d already exists", &p.Name) + return nil, errors.New("item already exists") + } + + (*s.items)[name] = p + res = (*s.items)[name] return } @@ -62,13 +68,13 @@ func (s *itemsrvc) CreateItem(ctx context.Context, p *item.Item) (res *item.Item // 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] + 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] + (*s.items)[p.Name] = p + res = (*s.items)[p.Name] return } @@ -76,13 +82,13 @@ func (s *itemsrvc) UpdateItem(ctx context.Context, p *item.Item) (res *item.Item // 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] + 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) + delete((*s.items), *p.Name) return }