Implemented first pass of character and inventory services
This commit is contained in:
@ -21,14 +21,14 @@ func main() {
|
||||
// Define command line flags, add any other flag required to configure the
|
||||
// service.
|
||||
var (
|
||||
hostF = flag.String("host", "localhost", "Server host (valid values: localhost)")
|
||||
domainF = flag.String("domain", "", "Host domain name (overrides host domain specified in service design)")
|
||||
httpPortF = flag.String("http-port", "", "HTTP port (overrides host HTTP port specified in service design)")
|
||||
secureF = flag.Bool("secure", false, "Use secure scheme (https or grpcs)")
|
||||
dbgF = flag.Bool("debug", false, "Log request and response bodies")
|
||||
itemAddr = flag.String("locator-addr", ":8082", "Item service address")
|
||||
//characterAddr = flag.String("locator-addr", ":8080", "Item service address")
|
||||
//inventoryAddr = flag.String("locator-addr", ":8081", "Item service address")
|
||||
hostF = flag.String("host", "localhost", "Server host (valid values: localhost)")
|
||||
domainF = flag.String("domain", "", "Host domain name (overrides host domain specified in service design)")
|
||||
httpPortF = flag.String("http-port", "", "HTTP port (overrides host HTTP port specified in service design)")
|
||||
secureF = flag.Bool("secure", false, "Use secure scheme (https or grpcs)")
|
||||
dbgF = flag.Bool("debug", false, "Log request and response bodies")
|
||||
itemAddr = flag.String("item-addr", ":8082", "Item service address")
|
||||
characterAddr = flag.String("character-addr", ":8083", "Character service address")
|
||||
inventoryAddr = flag.String("inventory-addr", ":8081", "Inventory service address")
|
||||
)
|
||||
flag.Parse()
|
||||
|
||||
@ -49,12 +49,29 @@ func main() {
|
||||
}
|
||||
defer itemClientConnection.Close()
|
||||
|
||||
inventoryClientConnection, err := grpc.Dial(*inventoryAddr,
|
||||
grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
if err != nil {
|
||||
log.Fatalf("failed to connect to inventory service", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer inventoryClientConnection.Close()
|
||||
|
||||
characterClientConnection, err := grpc.Dial(*characterAddr,
|
||||
grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||
if err != nil {
|
||||
log.Fatalf("failed to connect to character service", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer characterClientConnection.Close()
|
||||
|
||||
// Initialize the services.
|
||||
var (
|
||||
frontSvc front.Service
|
||||
)
|
||||
{
|
||||
frontSvc = frontapi.NewFront(logger, itemClientConnection)
|
||||
frontSvc = frontapi.NewFront(logger, itemClientConnection, characterClientConnection,
|
||||
inventoryClientConnection)
|
||||
}
|
||||
|
||||
// Wrap the services in endpoints that can be invoked from other services
|
||||
|
@ -100,7 +100,6 @@ var _ = Service("front", func() {
|
||||
|
||||
HTTP(func() {
|
||||
POST("/character")
|
||||
Body(Character)
|
||||
Response(StatusBadRequest)
|
||||
Response(StatusOK)
|
||||
Response(StatusInternalServerError)
|
||||
@ -115,7 +114,6 @@ var _ = Service("front", func() {
|
||||
|
||||
HTTP(func() {
|
||||
PUT("/character/{id}")
|
||||
Body(Character)
|
||||
Response(StatusOK)
|
||||
Response(StatusBadRequest)
|
||||
Response(StatusNotFound)
|
||||
@ -129,7 +127,7 @@ var _ = Service("front", func() {
|
||||
Error("BadRequest")
|
||||
|
||||
HTTP(func() {
|
||||
POST("/character/{id}")
|
||||
DELETE("/character/{id}")
|
||||
Response(StatusOK)
|
||||
Response(StatusBadRequest)
|
||||
Response(StatusNotFound)
|
||||
@ -137,26 +135,26 @@ var _ = Service("front", func() {
|
||||
})
|
||||
|
||||
Method("addItemToInventory", func() {
|
||||
Payload(Int)
|
||||
Payload(InventoryRecord)
|
||||
Result(Empty)
|
||||
Error("NotFound")
|
||||
Error("BadRequest")
|
||||
|
||||
HTTP(func() {
|
||||
POST("/inventory/{CharacterId}")
|
||||
POST("/character/{characterId}/item")
|
||||
Response(StatusOK)
|
||||
Response(StatusBadRequest)
|
||||
})
|
||||
})
|
||||
|
||||
Method("removeItemFromInventory", func() {
|
||||
Payload(Int)
|
||||
Payload(InventoryRecord)
|
||||
Result(Empty)
|
||||
Error("NotFound")
|
||||
Error("BadRequest")
|
||||
|
||||
HTTP(func() {
|
||||
PUT("/inventory/{CharacterId}")
|
||||
DELETE("/character/{characterId}/item/{itemId}")
|
||||
Response(StatusOK)
|
||||
Response(StatusBadRequest)
|
||||
})
|
||||
|
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user