Refactoring naming

This commit is contained in:
2023-08-15 19:55:36 -05:00
parent 5b9e100028
commit ef9aa29a99

View File

@ -9,7 +9,6 @@ import (
genInventory "crossnokaye-interview-assignment/services/inventory/gen/inventory" genInventory "crossnokaye-interview-assignment/services/inventory/gen/inventory"
genItemClient "crossnokaye-interview-assignment/services/item/gen/grpc/item/client" genItemClient "crossnokaye-interview-assignment/services/item/gen/grpc/item/client"
genItem "crossnokaye-interview-assignment/services/item/gen/item" genItem "crossnokaye-interview-assignment/services/item/gen/item"
"errors"
"fmt" "fmt"
"github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/empty"
goa "goa.design/goa/v3/pkg" goa "goa.design/goa/v3/pkg"
@ -55,28 +54,28 @@ type frontsrvc struct {
func NewFront(logger *log.Logger, itemClientConnection *grpc.ClientConn, characterClientConnection *grpc.ClientConn, func NewFront(logger *log.Logger, itemClientConnection *grpc.ClientConn, characterClientConnection *grpc.ClientConn,
inventoryClientConnection *grpc.ClientConn) front.Service { inventoryClientConnection *grpc.ClientConn) front.Service {
ic := genItemClient.NewClient(itemClientConnection) newItemClient := genItemClient.NewClient(itemClientConnection)
cc := genCharacterClient.NewClient(characterClientConnection) newCharacterClient := genCharacterClient.NewClient(characterClientConnection)
icc := genInventoryClient.NewClient(inventoryClientConnection) newInventoryClient := genInventoryClient.NewClient(inventoryClientConnection)
return &frontsrvc{logger: logger, return &frontsrvc{logger: logger,
itemClient: &itemClient{ itemClient: &itemClient{
ic.GetItem(), newItemClient.GetItem(),
ic.ListItems(), newItemClient.ListItems(),
ic.CreateItem(), newItemClient.CreateItem(),
ic.UpdateItem(), newItemClient.UpdateItem(),
ic.DeleteItem()}, newItemClient.DeleteItem()},
characterClient: &characterClient{ characterClient: &characterClient{
cc.GetCharacter(), newCharacterClient.GetCharacter(),
cc.ListCharacters(), newCharacterClient.ListCharacters(),
cc.CreateCharacter(), newCharacterClient.CreateCharacter(),
cc.UpdateCharacter(), newCharacterClient.UpdateCharacter(),
cc.DeleteCharacter()}, newCharacterClient.DeleteCharacter()},
inventoryClient: &inventoryClient{ inventoryClient: &inventoryClient{
icc.AddItem(), newInventoryClient.AddItem(),
icc.RemoveItem(), newInventoryClient.RemoveItem(),
icc.RemoveAll(), newInventoryClient.RemoveAll(),
icc.ListInventory(), newInventoryClient.ListInventory(),
icc.ListCharactersWithItem(), newInventoryClient.ListCharactersWithItem(),
}} }}
} }
@ -108,9 +107,9 @@ func (s *frontsrvc) ListItems(ctx context.Context) (res []*front.Item, err error
} }
// CreateItem implements createItem. // CreateItem implements createItem.
func (s *frontsrvc) CreateItem(ctx context.Context, p *front.Item) (res *front.Item, err error) { func (s *frontsrvc) CreateItem(ctx context.Context, itemPayload *front.Item) (res *front.Item, err error) {
s.logger.Print("front.createItem") s.logger.Print("front.createItem")
createItemResponse, err := s.itemClient.createItem(ctx, (*genItem.Item)(p)) createItemResponse, err := s.itemClient.createItem(ctx, (*genItem.Item)(itemPayload))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -120,9 +119,9 @@ func (s *frontsrvc) CreateItem(ctx context.Context, p *front.Item) (res *front.I
} }
// UpdateItem implements updateItem. // UpdateItem implements updateItem.
func (s *frontsrvc) UpdateItem(ctx context.Context, p *front.Item) (res *front.Item, err error) { func (s *frontsrvc) UpdateItem(ctx context.Context, itemPayload *front.Item) (res *front.Item, err error) {
s.logger.Print("front.updateItem") s.logger.Print("front.updateItem")
updateItemResponse, err := s.itemClient.updateItem(ctx, (*genItem.Item)(p)) updateItemResponse, err := s.itemClient.updateItem(ctx, (*genItem.Item)(itemPayload))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -133,21 +132,19 @@ func (s *frontsrvc) UpdateItem(ctx context.Context, p *front.Item) (res *front.I
} }
// DeleteItem implements deleteItem. // DeleteItem implements deleteItem.
func (s *frontsrvc) DeleteItem(ctx context.Context, p string) (err error) { func (s *frontsrvc) DeleteItem(ctx context.Context, name string) (err error) {
s.logger.Print("front.deleteItem") s.logger.Print("front.deleteItem")
characterResponse, err := s.inventoryClient.listCharactersWithItem(ctx, &genInventory.ListCharactersWithItemPayload{ItemName: &p}) characters, err := s.getCharactersUsingItem(ctx, name)
if err != nil { if err != nil {
return err return err
} }
characters := characterResponse.([]string)
if len(characters) > 0 { if len(characters) > 0 {
return front.MakeBadRequest(fmt.Errorf("item '%s' is referenced by character(s) %v", p, characters)) return front.MakeBadRequest(fmt.Errorf("item '%s' is referenced by character(s) %v", name, characters))
} }
_, err = s.itemClient.deleteItem(ctx, &genItem.DeleteItemPayload{Name: &p}) _, err = s.itemClient.deleteItem(ctx, &genItem.DeleteItemPayload{Name: &name})
if err != nil { if err != nil {
return err return err
} }
@ -183,9 +180,9 @@ func (s *frontsrvc) ListCharacters(ctx context.Context) (res []*front.Character,
} }
// CreateCharacter implements createCharacter. // CreateCharacter implements createCharacter.
func (s *frontsrvc) CreateCharacter(ctx context.Context, p *front.Character) (res *front.Character, err error) { func (s *frontsrvc) CreateCharacter(ctx context.Context, characterPayload *front.Character) (res *front.Character, err error) {
s.logger.Print("front.createCharacter") s.logger.Print("front.createCharacter")
createCharacterResponse, err := s.characterClient.createCharacter(ctx, (*genCharacter.Character)(p)) createCharacterResponse, err := s.characterClient.createCharacter(ctx, (*genCharacter.Character)(characterPayload))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -195,9 +192,9 @@ func (s *frontsrvc) CreateCharacter(ctx context.Context, p *front.Character) (re
} }
// UpdateCharacter implements updateCharacter. // UpdateCharacter implements updateCharacter.
func (s *frontsrvc) UpdateCharacter(ctx context.Context, p *front.Character) (res *front.Character, err error) { func (s *frontsrvc) UpdateCharacter(ctx context.Context, characterPayload *front.Character) (res *front.Character, err error) {
s.logger.Print("front.updateCharacter") s.logger.Print("front.updateCharacter")
updateCharacterResponse, err := s.characterClient.updateCharacter(ctx, (*genCharacter.Character)(p)) updateCharacterResponse, err := s.characterClient.updateCharacter(ctx, (*genCharacter.Character)(characterPayload))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -226,15 +223,15 @@ func (s *frontsrvc) DeleteCharacter(ctx context.Context, name string) (err error
} }
// AddItemToInventory implements addItemToInventory. // AddItemToInventory implements addItemToInventory.
func (s *frontsrvc) AddItemToInventory(ctx context.Context, p *front.InventoryRecord) (err error) { func (s *frontsrvc) AddItemToInventory(ctx context.Context, inventoryRecordPayload *front.InventoryRecord) (err error) {
s.logger.Print("front.addItemToInventory") s.logger.Print("front.addItemToInventory")
err = s.checkItemAndCharacter(ctx, p) err = s.checkItemAndCharacter(ctx, inventoryRecordPayload)
if err != nil { if err != nil {
return err return err
} }
_, err = s.inventoryClient.addItem(ctx, (*genInventory.InventoryRecord)(p)) _, err = s.inventoryClient.addItem(ctx, (*genInventory.InventoryRecord)(inventoryRecordPayload))
if err != nil { if err != nil {
return err return err
} }
@ -243,15 +240,15 @@ func (s *frontsrvc) AddItemToInventory(ctx context.Context, p *front.InventoryRe
} }
// RemoveItemFromInventory implements removeItemFromInventory. // RemoveItemFromInventory implements removeItemFromInventory.
func (s *frontsrvc) RemoveItemFromInventory(ctx context.Context, p *front.InventoryRecord) (err error) { func (s *frontsrvc) RemoveItemFromInventory(ctx context.Context, inventoryRecordPayload *front.InventoryRecord) (err error) {
s.logger.Print("front.removeItemFromInventory") s.logger.Print("front.removeItemFromInventory")
err = s.checkItemAndCharacter(ctx, p) err = s.checkItemAndCharacter(ctx, inventoryRecordPayload)
if err != nil { if err != nil {
return err return err
} }
_, err = s.inventoryClient.removeItem(ctx, (*genInventory.InventoryRecord)(p)) _, err = s.inventoryClient.removeItem(ctx, (*genInventory.InventoryRecord)(inventoryRecordPayload))
if err != nil { if err != nil {
return err return err
} }
@ -259,23 +256,19 @@ func (s *frontsrvc) RemoveItemFromInventory(ctx context.Context, p *front.Invent
return return
} }
func (s *frontsrvc) ListInventoryItems(ctx context.Context, payload *front.ListInventoryItemsPayload) (res []*front.Item, err error) { func (s *frontsrvc) ListInventoryItems(ctx context.Context, listInventoryItemsPayload *front.ListInventoryItemsPayload) (res []*front.Item, err error) {
listInventoryResponse, err := s.inventoryClient.listInventoryItems(ctx, listInventoryResponse, err := s.inventoryClient.listInventoryItems(ctx,
&genInventory.ListInventoryPayload{CharacterName: payload.CharacterName}) &genInventory.ListInventoryPayload{CharacterName: listInventoryItemsPayload.CharacterName})
if err != nil { if err != nil {
return nil, err return nil, err
} }
itemNames := listInventoryResponse.([]string) itemNames := listInventoryResponse.([]string)
if len(itemNames) == 0 {
return items, err := s.getItemsByName(ctx, itemNames)
}
itemResponse, err := s.itemClient.listItems(ctx, &genItem.ListItemsPayload{NameFilter: itemNames})
if err != nil { if err != nil {
return nil, err return nil, err
} }
items := itemResponse.([]*genItem.Item)
for _, value := range items { for _, value := range items {
res = append(res, (*front.Item)(value)) res = append(res, (*front.Item)(value))
} }
@ -283,24 +276,42 @@ func (s *frontsrvc) ListInventoryItems(ctx context.Context, payload *front.ListI
return return
} }
func (s *frontsrvc) checkItemAndCharacter(ctx context.Context, payload *front.InventoryRecord) (err error) { func (s *frontsrvc) getCharactersUsingItem(ctx context.Context, itemName string) (characters []string, err error) {
getItemResponse, err := s.itemClient.getItem(ctx, &genItem.GetItemPayload{Name: &payload.ItemName}) characterResponse, err := s.inventoryClient.listCharactersWithItem(ctx, &genInventory.ListCharactersWithItemPayload{ItemName: &itemName})
if err != nil {
return nil, err
}
return characterResponse.([]string), nil
}
func (s *frontsrvc) checkItemAndCharacter(ctx context.Context, inventoryRecord *front.InventoryRecord) (err error) {
getItemResponse, err := s.itemClient.getItem(ctx, &genItem.GetItemPayload{Name: &inventoryRecord.ItemName})
if err != nil { if err != nil {
return err return err
} }
if getItemResponse.(*genItem.Item) == nil { if getItemResponse.(*genItem.Item) == nil {
return errors.New("item not found") return front.MakeNotFound(fmt.Errorf("item '%s' not found", inventoryRecord.ItemName))
} }
getCharacterResponse, err := s.characterClient.getCharacter(ctx, getCharacterResponse, err := s.characterClient.getCharacter(ctx,
&genCharacter.GetCharacterPayload{Name: &payload.CharacterName}) &genCharacter.GetCharacterPayload{Name: &inventoryRecord.CharacterName})
if err != nil { if err != nil {
return err return err
} }
if getCharacterResponse.(*genCharacter.Character) == nil { if getCharacterResponse.(*genCharacter.Character) == nil {
return errors.New("character not found") return front.MakeNotFound(fmt.Errorf("character '%s' not found", inventoryRecord.CharacterName))
} }
return return
} }
func (s *frontsrvc) getItemsByName(ctx context.Context, itemNames []string) (items []*genItem.Item, err error) {
itemResponse, err := s.itemClient.listItems(ctx, &genItem.ListItemsPayload{NameFilter: itemNames})
if err != nil {
return nil, err
}
items = itemResponse.([]*genItem.Item)
return
}