From fd0cbab0ee4282371bfffc7a5be12d2b4c23f1f6 Mon Sep 17 00:00:00 2001 From: Brandon Watson Date: Mon, 14 Aug 2023 16:08:25 -0500 Subject: [PATCH] WIP --- services/front/client/item/itemClient.go | 62 ------------------------ services/front/design/design.go | 18 +++---- services/front/front.go | 20 +++++++- services/item/item.go | 51 ++++++++++++++++--- 4 files changed, 71 insertions(+), 80 deletions(-) delete mode 100644 services/front/client/item/itemClient.go diff --git a/services/front/client/item/itemClient.go b/services/front/client/item/itemClient.go deleted file mode 100644 index b54268c..0000000 --- a/services/front/client/item/itemClient.go +++ /dev/null @@ -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") -} diff --git a/services/front/design/design.go b/services/front/design/design.go index 4920bec..60e6754 100644 --- a/services/front/design/design.go +++ b/services/front/design/design.go @@ -25,7 +25,7 @@ var _ = Service("front", func() { Error("NotFound") HTTP(func() { - GET("/Item/{id}") + GET("/item/{id}") Response(StatusOK) Response(StatusBadRequest) Response(StatusNotFound) @@ -41,8 +41,7 @@ var _ = Service("front", func() { Error("BadRequest") HTTP(func() { - POST("/Item") - Body(Item) + POST("/item") Response(StatusOK) Response(StatusBadRequest) }) @@ -55,8 +54,7 @@ var _ = Service("front", func() { Error("BadRequest") HTTP(func() { - PUT("/Item/{id}") - Body(Item) + PUT("/item/{id}") Response(StatusOK) Response(StatusBadRequest) Response(StatusNotFound) @@ -70,7 +68,7 @@ var _ = Service("front", func() { Error("BadRequest") HTTP(func() { - POST("/Item/{id}") + POST("/item/{id}") Response(StatusOK) Response(StatusBadRequest) Response(StatusNotFound) @@ -84,7 +82,7 @@ var _ = Service("front", func() { Error("BadRequest") HTTP(func() { - GET("/Character/{id}") + GET("/character/{id}") Response(StatusOK) Response(StatusBadRequest) Response(StatusNotFound) @@ -101,7 +99,7 @@ var _ = Service("front", func() { Error("NotFound") HTTP(func() { - POST("/Character") + POST("/character") Body(Character) Response(StatusBadRequest) Response(StatusOK) @@ -116,7 +114,7 @@ var _ = Service("front", func() { Error("BadRequest") HTTP(func() { - PUT("/Character/{id}") + PUT("/character/{id}") Body(Character) Response(StatusOK) Response(StatusBadRequest) @@ -131,7 +129,7 @@ var _ = Service("front", func() { Error("BadRequest") HTTP(func() { - POST("/Character/{id}") + POST("/character/{id}") Response(StatusOK) Response(StatusBadRequest) Response(StatusNotFound) diff --git a/services/front/front.go b/services/front/front.go index 55f8a1e..04c2d61 100644 --- a/services/front/front.go +++ b/services/front/front.go @@ -51,21 +51,37 @@ func (s *frontsrvc) GetItem(ctx context.Context, id int) (res *front.Item, err e // CreateItem implements createItem. func (s *frontsrvc) CreateItem(ctx context.Context, p *front.Item) (res *front.Item, err error) { - res = &front.Item{} 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) { - res = &front.Item{} 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, p) + if err != nil { + return err + } + return } diff --git a/services/item/item.go b/services/item/item.go index 14625d9..5a74288 100644 --- a/services/item/item.go +++ b/services/item/item.go @@ -3,6 +3,7 @@ package itemapi import ( "context" item "crossnokaye-interview-assignment/services/item/gen/item" + "errors" "log" ) @@ -10,36 +11,74 @@ import ( // The example methods log the requests and return zero values. type itemsrvc struct { logger *log.Logger + items map[int]*item.Item } // NewItem returns the item service implementation. func NewItem(logger *log.Logger) item.Service { - return &itemsrvc{logger} + itemsMap := make(map[int]*item.Item) + return &itemsrvc{logger, itemsMap} } // GetItem implements getItem. func (s *itemsrvc) GetItem(ctx context.Context, p *item.GetItemPayload) (res *item.Item, err error) { - res = &item.Item{} - s.logger.Print("item.getItem") + s.logger.Print("itemToGet.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 } // CreateItem implements createItem. func (s *itemsrvc) CreateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) { - res = &item.Item{} 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 } // UpdateItem implements updateItem. func (s *itemsrvc) UpdateItem(ctx context.Context, p *item.Item) (res *item.Item, err error) { - res = &item.Item{} - s.logger.Print("item.updateItem") + s.logger.Print("itemToGet.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 } // DeleteItem implements deleteItem. func (s *itemsrvc) DeleteItem(ctx context.Context, p *item.DeleteItemPayload) (err error) { 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 }