Implemented first pass of character and inventory services

This commit is contained in:
Brandon Watson
2023-08-14 19:22:40 -05:00
parent a9eed6f284
commit 6799b59f9c
9 changed files with 232 additions and 57 deletions

View File

@ -2,7 +2,11 @@ package frontapi
import (
"context"
genCharacter "crossnokaye-interview-assignment/services/character/gen/character"
genCharacterClient "crossnokaye-interview-assignment/services/character/gen/grpc/character/client"
front "crossnokaye-interview-assignment/services/front/gen/front"
genInventoryClient "crossnokaye-interview-assignment/services/inventory/gen/grpc/inventory/client"
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"
goa "goa.design/goa/v3/pkg"
@ -17,24 +21,50 @@ type itemClient struct {
deleteItem goa.Endpoint
}
type characterClient struct {
getCharacter goa.Endpoint
createCharacter goa.Endpoint
updateCharacter goa.Endpoint
deleteCharacter goa.Endpoint
}
type inventoryClient struct {
addItem goa.Endpoint
removeItem goa.Endpoint
}
// front service example implementation.
// The example methods log the requests and return zero values.
type frontsrvc struct {
logger *log.Logger
itemClient *itemClient
itemClient *itemClient
characterClient *characterClient
inventoryClient *inventoryClient
}
// NewFront returns the front service implementation.
func NewFront(logger *log.Logger, itemClientConnection *grpc.ClientConn) front.Service {
func NewFront(logger *log.Logger, itemClientConnection *grpc.ClientConn, characterClientConnection *grpc.ClientConn,
inventoryClientConnection *grpc.ClientConn) front.Service {
ic := genItemClient.NewClient(itemClientConnection)
return &frontsrvc{logger: logger, itemClient: &itemClient{
ic.GetItem(),
ic.CreateItem(),
ic.UpdateItem(),
ic.DeleteItem()}}
cc := genCharacterClient.NewClient(characterClientConnection)
icc := genInventoryClient.NewClient(inventoryClientConnection)
return &frontsrvc{logger: logger,
itemClient: &itemClient{
ic.GetItem(),
ic.CreateItem(),
ic.UpdateItem(),
ic.DeleteItem()},
characterClient: &characterClient{
cc.GetCharacter(),
cc.CreateCharacter(),
cc.UpdateCharacter(),
cc.DeleteCharacter()},
inventoryClient: &inventoryClient{
icc.AddItem(),
icc.RemoveItem(),
}}
}
// GetItem implements getItem.
@ -86,40 +116,73 @@ func (s *frontsrvc) DeleteItem(ctx context.Context, p int) (err error) {
}
// GetCharacter implements getCharacter.
func (s *frontsrvc) GetCharacter(ctx context.Context, p int) (res *front.Character, err error) {
res = &front.Character{}
func (s *frontsrvc) GetCharacter(ctx context.Context, id int) (res *front.Character, err error) {
s.logger.Print("front.getCharacter")
getCharacterResponse, err := s.characterClient.getCharacter(ctx, &genCharacter.GetCharacterPayload{ID: &id})
if err != nil {
return nil, err
}
character := getCharacterResponse.(*genCharacter.Character)
res = (*front.Character)(character)
return
}
// CreateCharacter implements createCharacter.
func (s *frontsrvc) CreateCharacter(ctx context.Context, p *front.Character) (res *front.Character, err error) {
res = &front.Character{}
s.logger.Print("front.createCharacter")
createCharacterResponse, err := s.characterClient.createCharacter(ctx, (*genCharacter.Character)(p))
if err != nil {
return nil, err
}
character := createCharacterResponse.(*genCharacter.Character)
res = (*front.Character)(character)
return
}
// UpdateCharacter implements updateCharacter.
func (s *frontsrvc) UpdateCharacter(ctx context.Context, p *front.Character) (res *front.Character, err error) {
res = &front.Character{}
s.logger.Print("front.updateCharacter")
updateCharacterResponse, err := s.characterClient.updateCharacter(ctx, (*genCharacter.Character)(p))
if err != nil {
return nil, err
}
character := updateCharacterResponse.(*genCharacter.Character)
res = (*front.Character)(character)
return
}
// DeleteCharacter implements deleteCharacter.
func (s *frontsrvc) DeleteCharacter(ctx context.Context, p int) (err error) {
s.logger.Print("front.deleteCharacter")
_, err = s.characterClient.deleteCharacter(ctx, &genCharacter.DeleteCharacterPayload{ID: &p})
if err != nil {
return err
}
return
}
// AddItemToInventory implements addItemToInventory.
func (s *frontsrvc) AddItemToInventory(ctx context.Context, p int) (err error) {
func (s *frontsrvc) AddItemToInventory(ctx context.Context, p *front.InventoryRecord) (err error) {
s.logger.Print("front.addItemToInventory")
_, err = s.inventoryClient.addItem(ctx, (*genInventory.InventoryRecord)(p))
if err != nil {
return err
}
return
}
// RemoveItemFromInventory implements removeItemFromInventory.
func (s *frontsrvc) RemoveItemFromInventory(ctx context.Context, p int) (err error) {
func (s *frontsrvc) RemoveItemFromInventory(ctx context.Context, p *front.InventoryRecord) (err error) {
s.logger.Print("front.removeItemFromInventory")
_, err = s.inventoryClient.removeItem(ctx, (*genInventory.InventoryRecord)(p))
if err != nil {
return err
}
return
}