This commit is contained in:
Brandon Watson
2023-08-14 16:08:25 -05:00
parent 346d87f3d1
commit fd0cbab0ee
4 changed files with 71 additions and 80 deletions

View File

@ -1,62 +0,0 @@
package item
import (
"context"
"github.com/golang/protobuf/ptypes/empty"
goa "goa.design/goa/v3/pkg"
"google.golang.org/grpc"
"google.golang.org/protobuf/types/known/emptypb"
genClient "crossnokaye-interview-assignment/services/item/gen/grpc/item/client"
genItem "crossnokaye-interview-assignment/services/item/gen/item"
)
type (
ItemClient interface {
GetItemRequest(ctx context.Context, id int32) (*genItem.Item, error)
// listItems(ctx context.Context) (*Forecast, error)
CreateItemRequest(ctx context.Context, item genItem.Item) (*genItem.Item, error)
UpdateItemRequest(ctx context.Context, item genItem.Item) (*genItem.Item, error)
DeleteItemRequest(ctx context.Context, id int32) (*empty.Empty, error)
}
// client is the client implementation.
itemClient struct {
getItem goa.Endpoint
createItem goa.Endpoint
updateItem goa.Endpoint
deleteItem goa.Endpoint
}
)
// New instantiates a new forecast service client.
func New(clientConnection *grpc.ClientConn) ItemClient {
c := genClient.NewClient(clientConnection, grpc.WaitForReady(true))
return &itemClient{c.GetItem(), c.CreateItem(), c.UpdateItem(), c.DeleteItem()}
}
// createItemRequest implements ItemClient.
func (itemClient *itemClient) CreateItemRequest(ctx context.Context, item genItem.Item) (*genItem.Item, error) {
res, err := itemClient.createItem(ctx, item)
if err != nil {
return nil, err
}
return res.(*genItem.Item), nil
}
// deleteItemRequest implements ItemClient.
func (itemClient *itemClient) DeleteItemRequest(ctx context.Context, id int32) (*emptypb.Empty, error) {
panic("unimplemented")
}
// getItemRequest implements ItemClient.
func (itemClient *itemClient) GetItemRequest(ctx context.Context, id int32) (*genItem.Item, error) {
panic("unimplemented")
}
// updateItemRequest implements ItemClient.
func (itemClient *itemClient) UpdateItemRequest(ctx context.Context, item genItem.Item) (*genItem.Item, error) {
panic("unimplemented")
}

View File

@ -25,7 +25,7 @@ var _ = Service("front", func() {
Error("NotFound") Error("NotFound")
HTTP(func() { HTTP(func() {
GET("/Item/{id}") GET("/item/{id}")
Response(StatusOK) Response(StatusOK)
Response(StatusBadRequest) Response(StatusBadRequest)
Response(StatusNotFound) Response(StatusNotFound)
@ -41,8 +41,7 @@ var _ = Service("front", func() {
Error("BadRequest") Error("BadRequest")
HTTP(func() { HTTP(func() {
POST("/Item") POST("/item")
Body(Item)
Response(StatusOK) Response(StatusOK)
Response(StatusBadRequest) Response(StatusBadRequest)
}) })
@ -55,8 +54,7 @@ var _ = Service("front", func() {
Error("BadRequest") Error("BadRequest")
HTTP(func() { HTTP(func() {
PUT("/Item/{id}") PUT("/item/{id}")
Body(Item)
Response(StatusOK) Response(StatusOK)
Response(StatusBadRequest) Response(StatusBadRequest)
Response(StatusNotFound) Response(StatusNotFound)
@ -70,7 +68,7 @@ var _ = Service("front", func() {
Error("BadRequest") Error("BadRequest")
HTTP(func() { HTTP(func() {
POST("/Item/{id}") POST("/item/{id}")
Response(StatusOK) Response(StatusOK)
Response(StatusBadRequest) Response(StatusBadRequest)
Response(StatusNotFound) Response(StatusNotFound)
@ -84,7 +82,7 @@ var _ = Service("front", func() {
Error("BadRequest") Error("BadRequest")
HTTP(func() { HTTP(func() {
GET("/Character/{id}") GET("/character/{id}")
Response(StatusOK) Response(StatusOK)
Response(StatusBadRequest) Response(StatusBadRequest)
Response(StatusNotFound) Response(StatusNotFound)
@ -101,7 +99,7 @@ var _ = Service("front", func() {
Error("NotFound") Error("NotFound")
HTTP(func() { HTTP(func() {
POST("/Character") POST("/character")
Body(Character) Body(Character)
Response(StatusBadRequest) Response(StatusBadRequest)
Response(StatusOK) Response(StatusOK)
@ -116,7 +114,7 @@ var _ = Service("front", func() {
Error("BadRequest") Error("BadRequest")
HTTP(func() { HTTP(func() {
PUT("/Character/{id}") PUT("/character/{id}")
Body(Character) Body(Character)
Response(StatusOK) Response(StatusOK)
Response(StatusBadRequest) Response(StatusBadRequest)
@ -131,7 +129,7 @@ var _ = Service("front", func() {
Error("BadRequest") Error("BadRequest")
HTTP(func() { HTTP(func() {
POST("/Character/{id}") POST("/character/{id}")
Response(StatusOK) Response(StatusOK)
Response(StatusBadRequest) Response(StatusBadRequest)
Response(StatusNotFound) Response(StatusNotFound)

View File

@ -51,21 +51,37 @@ func (s *frontsrvc) GetItem(ctx context.Context, id int) (res *front.Item, err e
// 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, p *front.Item) (res *front.Item, err error) {
res = &front.Item{}
s.logger.Print("front.createItem") 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 return
} }
// 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, p *front.Item) (res *front.Item, err error) {
res = &front.Item{}
s.logger.Print("front.updateItem") 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 return
} }
// DeleteItem implements deleteItem. // DeleteItem implements deleteItem.
func (s *frontsrvc) DeleteItem(ctx context.Context, p int) (err error) { func (s *frontsrvc) DeleteItem(ctx context.Context, p int) (err error) {
s.logger.Print("front.deleteItem") s.logger.Print("front.deleteItem")
_, err = s.itemClient.deleteItem(ctx, p)
if err != nil {
return err
}
return return
} }

View File

@ -3,6 +3,7 @@ package itemapi
import ( import (
"context" "context"
item "crossnokaye-interview-assignment/services/item/gen/item" item "crossnokaye-interview-assignment/services/item/gen/item"
"errors"
"log" "log"
) )
@ -10,36 +11,74 @@ import (
// The example methods log the requests and return zero values. // The example methods log the requests and return zero values.
type itemsrvc struct { type itemsrvc struct {
logger *log.Logger logger *log.Logger
items map[int]*item.Item
} }
// NewItem returns the item service implementation. // NewItem returns the item service implementation.
func NewItem(logger *log.Logger) item.Service { func NewItem(logger *log.Logger) item.Service {
return &itemsrvc{logger} itemsMap := make(map[int]*item.Item)
return &itemsrvc{logger, itemsMap}
} }
// GetItem implements getItem. // GetItem implements getItem.
func (s *itemsrvc) GetItem(ctx context.Context, p *item.GetItemPayload) (res *item.Item, err error) { func (s *itemsrvc) GetItem(ctx context.Context, p *item.GetItemPayload) (res *item.Item, err error) {
res = &item.Item{} s.logger.Print("itemToGet.getItem")
s.logger.Print("item.getItem")
itemToGet := s.items[*p.ID]
if itemToGet == nil {
s.logger.Printf("itemToGet with id %d not found", p.ID)
return nil, errors.New("item not found")
}
res = s.items[*p.ID]
return return
} }
// CreateItem implements createItem. // CreateItem implements createItem.
func (s *itemsrvc) CreateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) { func (s *itemsrvc) CreateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) {
res = &item.Item{}
s.logger.Print("item.createItem") s.logger.Print("item.createItem")
id := -1
// Using this method of assigning IDs means they will
// potentially be non-sequential if ids are deleted
if p.ID != nil {
id = *p.ID
} else {
id = len(s.items)
}
p.ID = &id
s.items[id] = p
res = p
return return
} }
// UpdateItem implements updateItem. // UpdateItem implements updateItem.
func (s *itemsrvc) UpdateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) { func (s *itemsrvc) UpdateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) {
res = &item.Item{} s.logger.Print("itemToGet.updateItem")
s.logger.Print("item.updateItem") itemToUpdate := s.items[*p.ID]
if itemToUpdate == nil {
s.logger.Printf("itemToGet with id %d not found", p.ID)
return nil, errors.New("item not found")
}
s.items[*p.ID] = p
res = itemToUpdate
return return
} }
// DeleteItem implements deleteItem. // DeleteItem implements deleteItem.
func (s *itemsrvc) DeleteItem(ctx context.Context, p *item.DeleteItemPayload) (err error) { func (s *itemsrvc) DeleteItem(ctx context.Context, p *item.DeleteItemPayload) (err error) {
s.logger.Print("item.deleteItem") s.logger.Print("item.deleteItem")
itemToDelete := s.items[*p.ID]
if itemToDelete == nil {
s.logger.Printf("itemToGet with id %d not found", p.ID)
return errors.New("item not found")
}
delete(s.items, *p.ID)
return return
} }