Successfully listing inventory

This commit is contained in:
Brandon Watson
2023-08-14 21:58:52 -05:00
parent a290cd1420
commit 3dc369e944
4 changed files with 72 additions and 15 deletions

View File

@ -9,6 +9,7 @@ import (
genInventory "crossnokaye-interview-assignment/services/inventory/gen/inventory"
genItemClient "crossnokaye-interview-assignment/services/item/gen/grpc/item/client"
genItem "crossnokaye-interview-assignment/services/item/gen/item"
"errors"
"github.com/golang/protobuf/ptypes/empty"
goa "goa.design/goa/v3/pkg"
"google.golang.org/grpc"
@ -88,7 +89,7 @@ func (s *frontsrvc) GetItem(ctx context.Context, name string) (res *front.Item,
func (s *frontsrvc) ListItems(ctx context.Context) (res []*front.Item, err error) {
s.logger.Print("front.listItems")
listItemsResponse, err := s.itemClient.listItems(ctx, empty.Empty{})
listItemsResponse, err := s.itemClient.listItems(ctx, &genItem.ListItemsPayload{})
if err != nil {
return nil, err
}
@ -205,6 +206,12 @@ func (s *frontsrvc) DeleteCharacter(ctx context.Context, name string) (err error
// AddItemToInventory implements addItemToInventory.
func (s *frontsrvc) AddItemToInventory(ctx context.Context, p *front.InventoryRecord) (err error) {
s.logger.Print("front.addItemToInventory")
err = s.checkItemAndCharacter(ctx, p)
if err != nil {
return err
}
_, err = s.inventoryClient.addItem(ctx, (*genInventory.InventoryRecord)(p))
if err != nil {
return err
@ -216,6 +223,12 @@ func (s *frontsrvc) AddItemToInventory(ctx context.Context, p *front.InventoryRe
// RemoveItemFromInventory implements removeItemFromInventory.
func (s *frontsrvc) RemoveItemFromInventory(ctx context.Context, p *front.InventoryRecord) (err error) {
s.logger.Print("front.removeItemFromInventory")
err = s.checkItemAndCharacter(ctx, p)
if err != nil {
return err
}
_, err = s.inventoryClient.removeItem(ctx, (*genInventory.InventoryRecord)(p))
if err != nil {
return err
@ -225,15 +238,47 @@ func (s *frontsrvc) RemoveItemFromInventory(ctx context.Context, p *front.Invent
}
func (s *frontsrvc) ListInventoryItems(ctx context.Context, payload *front.ListInventoryItemsPayload) (res []*front.Item, err error) {
//listInventoryResponse, err := s.inventoryClient.listInventoryItems(ctx,
// &genInventory.ListInventoryPayload{CharacterID: payload.CharacterID})
//if err != nil {
// return nil, err
//}
//
//itemIds := listInventoryResponse.([]*int)
//for _, itemToReturn := range itemIds {
// res = append(frontCharacters, (*front.Character)(itemToReturn))
//}
listInventoryResponse, err := s.inventoryClient.listInventoryItems(ctx,
&genInventory.ListInventoryPayload{CharacterName: payload.CharacterName})
if err != nil {
return nil, err
}
itemNames := listInventoryResponse.([]string)
if itemNames == nil {
return
}
itemResponse, err := s.itemClient.listItems(ctx, &genItem.ListItemsPayload{NameFilter: itemNames})
if err != nil {
return nil, err
}
items := itemResponse.([]*genItem.Item)
for _, value := range items {
res = append(res, (*front.Item)(value))
}
return
}
func (s *frontsrvc) checkItemAndCharacter(ctx context.Context, payload *front.InventoryRecord) (err error) {
getItemResponse, err := s.itemClient.getItem(ctx, &genItem.GetItemPayload{Name: &payload.ItemName})
if err != nil {
return err
}
if getItemResponse.(*genItem.Item) == nil {
return errors.New("item not found")
}
getCharacterResponse, err := s.characterClient.getCharacter(ctx,
&genCharacter.GetCharacterPayload{Name: &payload.CharacterName})
if err != nil {
return err
}
if getCharacterResponse.(*genCharacter.Character) == nil {
return errors.New("character not found")
}
return
}

View File

@ -57,6 +57,9 @@ 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 {
return nil, nil
}
res = *s.inventories[*payload.CharacterName]
return

View File

@ -31,7 +31,9 @@ var _ = Service("item", func() {
})
Method("listItems", func() {
Payload(Empty)
Payload(func() {
Field(1, "nameFilter", ArrayOf(String))
})
Result(ArrayOf(Item))
GRPC(func() {

View File

@ -34,10 +34,17 @@ func (s *itemsrvc) GetItem(ctx context.Context, p *item.GetItemPayload) (res *it
return
}
func (s *itemsrvc) ListItems(ctx context.Context) (res []*item.Item, err error) {
for _, value := range s.items {
res = append(res, value)
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
}