Converting service state to pointers

This commit is contained in:
Brandon Watson
2023-08-15 11:36:31 -05:00
parent 3dc369e944
commit 3511a4f022
3 changed files with 47 additions and 34 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}