diff --git a/app/controller/book_controller.go b/app/controller/book_controller.go index 7b5a8498..1cbfddaa 100644 --- a/app/controller/book_controller.go +++ b/app/controller/book_controller.go @@ -1,7 +1,6 @@ package controller import ( - "fmt" "net/http" "strconv" @@ -16,6 +15,7 @@ import ( // BookController is controller to book entity type BookController struct { dig.In + BookControllerResponse service.BookService } @@ -37,14 +37,14 @@ func (c *BookController) Create(ctx echo.Context) (err error) { } err = validator.New().Struct(book) if err != nil { - return invalidMessage(ctx, err) + return c.invalidMessage(ctx, err) } ctx0 := ctx.Request().Context() result, err := c.BookService.Insert(ctx0, book) if err != nil { return err } - return insertSuccess(ctx, result) + return c.insertSuccess(ctx, result) } // List of book @@ -61,7 +61,7 @@ func (c *BookController) List(ctx echo.Context) error { func (c *BookController) Get(ctx echo.Context) error { id, err := strconv.ParseInt(ctx.Param("id"), 10, 64) if err != nil { - return invalidID(ctx, err) + return c.invalidID(ctx, err) } ctx0 := ctx.Request().Context() book, err := c.BookService.Find(ctx0, id) @@ -69,7 +69,7 @@ func (c *BookController) Get(ctx echo.Context) error { return err } if book == nil { - return ctx.JSON(http.StatusNotFound, map[string]string{"message": fmt.Sprintf("book #%d not found", id)}) + return c.bookNotFound(ctx, id) } return ctx.JSON(http.StatusOK, book) } @@ -78,14 +78,14 @@ func (c *BookController) Get(ctx echo.Context) error { func (c *BookController) Delete(ctx echo.Context) error { id, err := strconv.ParseInt(ctx.Param("id"), 10, 64) if err != nil { - return invalidID(ctx, err) + return c.invalidID(ctx, err) } ctx0 := ctx.Request().Context() err = c.BookService.Delete(ctx0, id) if err != nil { return err } - return ctx.JSON(http.StatusOK, map[string]string{"message": fmt.Sprintf("Delete #%d done", id)}) + return c.bookDeleted(ctx, id) } // Update book @@ -96,16 +96,16 @@ func (c *BookController) Update(ctx echo.Context) (err error) { return err } if book.ID <= 0 { - return invalidID(ctx, err) + return c.invalidID(ctx, err) } err = validator.New().Struct(book) if err != nil { - return invalidMessage(ctx, err) + return c.invalidMessage(ctx, err) } ctx0 := ctx.Request().Context() err = c.BookService.Update(ctx0, book) if err != nil { return err } - return ctx.JSON(http.StatusOK, map[string]string{"message": "Update success"}) + return c.bookUpdated(ctx, book.ID) } diff --git a/app/controller/book_controller_response.go b/app/controller/book_controller_response.go new file mode 100644 index 00000000..4d88989c --- /dev/null +++ b/app/controller/book_controller_response.go @@ -0,0 +1,50 @@ +package controller + +import ( + "fmt" + "net/http" + + "github.com/labstack/echo" + "go.uber.org/dig" +) + +// BookControllerResponse is response of BookController +type BookControllerResponse struct { + dig.In +} + +func (BookControllerResponse) invalidMessage(ctx echo.Context, err error) error { + return ctx.JSON(http.StatusBadRequest, GeneralResponse{ + Message: "Invalid Message", + }) +} + +func (BookControllerResponse) invalidID(ctx echo.Context, err error) error { + return ctx.JSON(http.StatusBadRequest, GeneralResponse{ + Message: "Invalid ID", + }) +} + +func (BookControllerResponse) insertSuccess(ctx echo.Context, lastInsertID int64) error { + return ctx.JSON(http.StatusCreated, GeneralResponse{ + Message: fmt.Sprintf("Success insert new record #%d", lastInsertID), + }) +} + +func (BookControllerResponse) bookNotFound(ctx echo.Context, id int64) error { + return ctx.JSON(http.StatusNotFound, GeneralResponse{ + Message: fmt.Sprintf("book #%d not found", id), + }) +} + +func (BookControllerResponse) bookDeleted(ctx echo.Context, id int64) error { + return ctx.JSON(http.StatusOK, GeneralResponse{ + Message: fmt.Sprintf("Delete #%d done", id), + }) +} + +func (BookControllerResponse) bookUpdated(ctx echo.Context, id int64) error { + return ctx.JSON(http.StatusOK, GeneralResponse{ + Message: fmt.Sprintf("Update #%d success", id), + }) +} diff --git a/app/controller/book_controller_test.go b/app/controller/book_controller_test.go index 708a137a..d212f457 100644 --- a/app/controller/book_controller_test.go +++ b/app/controller/book_controller_test.go @@ -195,6 +195,6 @@ func TestBookController_Update(t *testing.T) { rr, err := echokit.DoPUT(bookCntrl.Update, "/", `{"id": 1, "author":"some-author", "title":"some-title"}`) require.NoError(t, err) require.Equal(t, http.StatusOK, rr.Code) - require.Equal(t, "{\"message\":\"Update success\"}\n", rr.Body.String()) + require.Equal(t, "{\"message\":\"Update #1 success\"}\n", rr.Body.String()) }) } diff --git a/app/controller/general_response.go b/app/controller/general_response.go new file mode 100644 index 00000000..6fcb52a3 --- /dev/null +++ b/app/controller/general_response.go @@ -0,0 +1,6 @@ +package controller + +// GeneralResponse is general response +type GeneralResponse struct { + Message string `json:"message"` +} diff --git a/app/controller/response.go b/app/controller/response.go deleted file mode 100644 index 2ece444a..00000000 --- a/app/controller/response.go +++ /dev/null @@ -1,35 +0,0 @@ -package controller - -import ( - "fmt" - "net/http" - - "github.com/labstack/echo" -) - -const ( - underConstrucionStatus = http.StatusServiceUnavailable - invalidMessageStatus = http.StatusBadRequest - invalidIDStatus = http.StatusBadRequest - insertSuccessStatus = http.StatusCreated -) - -func invalidMessage(ctx echo.Context, err error) error { - res := map[string]interface{}{} - res["message"] = "Invalid Message" - - return ctx.JSON(invalidMessageStatus, res) -} - -func invalidID(ctx echo.Context, err error) error { - res := map[string]interface{}{} - res["message"] = "Invalid ID" - - return ctx.JSON(invalidIDStatus, res) -} - -func insertSuccess(ctx echo.Context, lastInsertID int64) error { - res := map[string]interface{}{} - res["message"] = fmt.Sprintf("Success insert new record #%d", lastInsertID) - return ctx.JSON(insertSuccessStatus, res) -}