Files
crossnokaye-interview-assig…/services/front/front.go
2023-08-14 20:21:33 -05:00

240 lines
7.1 KiB
Go

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"
"github.com/golang/protobuf/ptypes/empty"
goa "goa.design/goa/v3/pkg"
"google.golang.org/grpc"
"log"
)
type itemClient struct {
getItem goa.Endpoint
listItems goa.Endpoint
createItem goa.Endpoint
updateItem goa.Endpoint
deleteItem goa.Endpoint
}
type characterClient struct {
getCharacter goa.Endpoint
listCharacters goa.Endpoint
createCharacter goa.Endpoint
updateCharacter goa.Endpoint
deleteCharacter goa.Endpoint
}
type inventoryClient struct {
addItem goa.Endpoint
removeItem goa.Endpoint
listInventoryItems goa.Endpoint
}
// front service example implementation.
// The example methods log the requests and return zero values.
type frontsrvc struct {
logger *log.Logger
itemClient *itemClient
characterClient *characterClient
inventoryClient *inventoryClient
}
// NewFront returns the front service implementation.
func NewFront(logger *log.Logger, itemClientConnection *grpc.ClientConn, characterClientConnection *grpc.ClientConn,
inventoryClientConnection *grpc.ClientConn) front.Service {
ic := genItemClient.NewClient(itemClientConnection)
cc := genCharacterClient.NewClient(characterClientConnection)
icc := genInventoryClient.NewClient(inventoryClientConnection)
return &frontsrvc{logger: logger,
itemClient: &itemClient{
ic.GetItem(),
ic.ListItems(),
ic.CreateItem(),
ic.UpdateItem(),
ic.DeleteItem()},
characterClient: &characterClient{
cc.GetCharacter(),
cc.ListCharacters(),
cc.CreateCharacter(),
cc.UpdateCharacter(),
cc.DeleteCharacter()},
inventoryClient: &inventoryClient{
icc.AddItem(),
icc.RemoveItem(),
icc.ListInventory(),
}}
}
// GetItem implements getItem.
func (s *frontsrvc) GetItem(ctx context.Context, id int) (res *front.Item, err error) {
s.logger.Print("front.getItem")
getItemResponse, err := s.itemClient.getItem(ctx, &genItem.GetItemPayload{ID: &id})
if err != nil {
return nil, err
}
item := getItemResponse.(*genItem.Item)
res = (*front.Item)(item)
return
}
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{})
if err != nil {
return nil, err
}
items := listItemsResponse.([]*genItem.Item)
for _, itemToReturn := range items {
res = append(res, (*front.Item)(itemToReturn))
}
return
}
// CreateItem implements createItem.
func (s *frontsrvc) CreateItem(ctx context.Context, p *front.Item) (res *front.Item, err error) {
s.logger.Print("front.createItem")
createItemResponse, err := s.itemClient.createItem(ctx, (*genItem.Item)(p))
if err != nil {
return nil, err
}
item := createItemResponse.(*genItem.Item)
res = (*front.Item)(item)
return
}
// UpdateItem implements updateItem.
func (s *frontsrvc) UpdateItem(ctx context.Context, p *front.Item) (res *front.Item, err error) {
s.logger.Print("front.updateItem")
updateItemResponse, err := s.itemClient.updateItem(ctx, (*genItem.Item)(p))
if err != nil {
return nil, err
}
item := updateItemResponse.(*genItem.Item)
res = (*front.Item)(item)
return
}
// DeleteItem implements deleteItem.
func (s *frontsrvc) DeleteItem(ctx context.Context, p int) (err error) {
s.logger.Print("front.deleteItem")
_, err = s.itemClient.deleteItem(ctx, &genItem.DeleteItemPayload{ID: &p})
if err != nil {
return err
}
return
}
// GetCharacter implements getCharacter.
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
}
func (s *frontsrvc) ListCharacters(ctx context.Context) (res []*front.Character, err error) {
s.logger.Print("front.listCharacters")
listCharactersResponse, err := s.characterClient.listCharacters(ctx, empty.Empty{})
if err != nil {
return nil, err
}
characters := listCharactersResponse.([]*genCharacter.Character)
for _, itemToReturn := range characters {
res = append(res, (*front.Character)(itemToReturn))
}
return
}
// CreateCharacter implements createCharacter.
func (s *frontsrvc) CreateCharacter(ctx context.Context, p *front.Character) (res *front.Character, err error) {
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) {
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 *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 *front.InventoryRecord) (err error) {
s.logger.Print("front.removeItemFromInventory")
_, err = s.inventoryClient.removeItem(ctx, (*genInventory.InventoryRecord)(p))
if err != nil {
return err
}
return
}
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))
//}
return
}