From 546be77e9db494252430629bfc73f3e504dde700 Mon Sep 17 00:00:00 2001 From: Brandon Romano Date: Wed, 21 Dec 2016 15:17:47 -0500 Subject: [PATCH] Refactor errors (#30) --- controllers/boards_controller.go | 94 ++++++------------- controllers/boards_pins_controller.go | 24 ++--- controllers/me_boards_controller.go | 22 ++--- controllers/me_boards_suggested_controller.go | 26 ++--- controllers/me_controller.go | 22 ++--- controllers/me_followers_controller.go | 26 ++--- controllers/me_following_boards_controller.go | 76 +++++---------- .../me_following_interests_controller.go | 26 ++--- controllers/me_following_users_controller.go | 76 +++++---------- controllers/me_likes_controller.go | 26 ++--- controllers/me_pins_controller.go | 26 ++--- controllers/me_search_boards_controller.go | 26 ++--- controllers/me_search_pins_controller.go | 26 ++--- controllers/pins_controller.go | 93 ++++++------------ controllers/users_controller.go | 24 ++--- models/pinterest_error.go | 18 ++++ 16 files changed, 209 insertions(+), 422 deletions(-) diff --git a/controllers/boards_controller.go b/controllers/boards_controller.go index ffa7a09..b9ec99c 100644 --- a/controllers/boards_controller.go +++ b/controllers/boards_controller.go @@ -23,29 +23,21 @@ func NewBoardsController(wc *wrecker.Wrecker) *BoardsController { // Fetch loads a board from the board_spec (username/board-slug) // Endpoint: [GET] /v1/boards// func (bc *BoardsController) Fetch(boardSpec string) (*models.Board, error) { - // Make request - response := new(models.Response) - response.Data = new(models.Board) - resp, err := bc.wreckerClient.Get("/boards/"+boardSpec). + // Build + execute request + resp := new(models.Response) + resp.Data = new(models.Board) + httpResp, err := bc.wreckerClient.Get("/boards/"+boardSpec). URLParam("fields", models.BOARD_FIELDS). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.Board), nil + return resp.Data.(*models.Board), nil } // BoardCreateOptionals is a struct that represents the optional parameters @@ -57,31 +49,23 @@ type BoardCreateOptionals struct { // Create makes a new board // Endpoint: [POST] /v1/boards/ func (bc *BoardsController) Create(boardName string, optionals *BoardCreateOptionals) (*models.Board, error) { - // Make request - response := new(models.Response) - response.Data = new(models.Board) - resp, err := bc.wreckerClient.Post("/boards/"). + // Build + execute request + resp := new(models.Response) + resp.Data = new(models.Board) + httpResp, err := bc.wreckerClient.Post("/boards/"). URLParam("fields", models.BOARD_FIELDS). FormParam("name", boardName). FormParam("description", optionals.Description). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.Board), nil + return resp.Data.(*models.Board), nil } // BoardUpdateOptionals is a struct that represents the optional parameters @@ -94,56 +78,40 @@ type BoardUpdateOptionals struct { // Update updates an existing board // Endpoint: [PATCH] /v1/boards// func (bc *BoardsController) Update(boardSpec string, optionals *BoardUpdateOptionals) (*models.Board, error) { - // Make request - response := new(models.Response) - response.Data = new(models.Board) - resp, err := bc.wreckerClient.Patch("/boards/"+boardSpec+"/"). + // Build + execute request + resp := new(models.Response) + resp.Data = new(models.Board) + httpResp, err := bc.wreckerClient.Patch("/boards/"+boardSpec+"/"). URLParam("fields", models.BOARD_FIELDS). FormParam("name", optionals.Name). FormParam("description", optionals.Description). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.Board), nil + return resp.Data.(*models.Board), nil } // Delete deletes an existing board // Endpoint: [DELETE] /v1/boards// func (bc *BoardsController) Delete(boardSpec string) error { - // Make request - response := new(models.Response) - response.Data = "" - resp, err := bc.wreckerClient.Delete("/boards/" + boardSpec + "/"). - Into(response). + // Build + execute request + resp := new(models.Response) + resp.Data = "" + httpResp, err := bc.wreckerClient.Delete("/boards/" + boardSpec + "/"). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK return nil } diff --git a/controllers/boards_pins_controller.go b/controllers/boards_pins_controller.go index df48df4..6005262 100644 --- a/controllers/boards_pins_controller.go +++ b/controllers/boards_pins_controller.go @@ -27,27 +27,19 @@ type BoardsPinsFetchOptionals struct { // Fetch loads a board from the board_spec (username/board-slug) // Endpoint: [GET] /v1/boards//pins/ func (bpc *BoardsPinsController) Fetch(boardSpec string, optionals *BoardsPinsFetchOptionals) (*[]models.Pin, error) { - // Make request - response := new(models.Response) - response.Data = &[]models.Pin{} - resp, err := bpc.wreckerClient.Get("/boards/"+boardSpec+"/pins/"). + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Pin{} + httpResp, err := bpc.wreckerClient.Get("/boards/"+boardSpec+"/pins/"). URLParam("fields", models.PIN_FIELDS). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Pin), nil + return resp.Data.(*[]models.Pin), nil } diff --git a/controllers/me_boards_controller.go b/controllers/me_boards_controller.go index 8d65aaa..0e46613 100644 --- a/controllers/me_boards_controller.go +++ b/controllers/me_boards_controller.go @@ -24,26 +24,18 @@ func newMeBoardsController(wc *wrecker.Wrecker) *MeBoardsController { // Endpoint: [GET] /v1/me/boards/ func (mbc *MeBoardsController) Fetch() (*[]models.Board, error) { // Build + execute request - response := new(models.Response) - response.Data = &[]models.Board{} - resp, err := mbc.wreckerClient.Get("/me/boards/"). + resp := new(models.Response) + resp.Data = &[]models.Board{} + httpResp, err := mbc.wreckerClient.Get("/me/boards/"). URLParam("fields", models.BOARD_FIELDS). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Board), nil + return resp.Data.(*[]models.Board), nil } diff --git a/controllers/me_boards_suggested_controller.go b/controllers/me_boards_suggested_controller.go index 8b6c329..bcbc2b6 100644 --- a/controllers/me_boards_suggested_controller.go +++ b/controllers/me_boards_suggested_controller.go @@ -29,35 +29,25 @@ type MeBoardsSuggestedFetchOptionals struct { // Fetch loads board suggestions for the logged in user // Endpoint: [GET] /v1/me/boards/suggested/ func (mbsc *MeBoardsSuggestedController) Fetch(optionals *MeBoardsSuggestedFetchOptionals) (*[]models.Board, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.Board{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Board{} request := mbsc.wreckerClient.Get("/me/boards/suggested/"). URLParam("fields", models.BOARD_FIELDS). - Into(response) + Into(resp) if optionals.Count != 0 { request.URLParam("count", strconv.Itoa(int(optionals.Count))) } if optionals.Pin != "" { request.URLParam("pin", optionals.Pin) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Board), nil + return resp.Data.(*[]models.Board), nil } diff --git a/controllers/me_controller.go b/controllers/me_controller.go index 2f4730f..8b0d2de 100644 --- a/controllers/me_controller.go +++ b/controllers/me_controller.go @@ -34,26 +34,18 @@ func NewMeController(wc *wrecker.Wrecker) *MeController { // Endpoint: [GET] /v1/me/ func (mc *MeController) Fetch() (*models.User, error) { // Build + execute request - response := new(models.Response) - response.Data = new(models.User) - resp, err := mc.wreckerClient.Get("/me/"). + resp := new(models.Response) + resp.Data = new(models.User) + httpResp, err := mc.wreckerClient.Get("/me/"). URLParam("fields", models.USER_FIELDS). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.User), nil + return resp.Data.(*models.User), nil } diff --git a/controllers/me_followers_controller.go b/controllers/me_followers_controller.go index 90fe4c5..261a28e 100644 --- a/controllers/me_followers_controller.go +++ b/controllers/me_followers_controller.go @@ -27,32 +27,22 @@ type MeFollowersFetchOptionals struct { // Fetch loads the users that follow the logged in user // Endpoint: [GET] /v1/me/boards/followers/ func (mfc *MeFollowersController) Fetch(optionals *MeFollowersFetchOptionals) (*[]models.User, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.User{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.User{} request := mfc.wreckerClient.Get("/me/followers/"). URLParam("fields", models.USER_FIELDS). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.User), &response.Page, nil + return resp.Data.(*[]models.User), &resp.Page, nil } diff --git a/controllers/me_following_boards_controller.go b/controllers/me_following_boards_controller.go index 124fcdc..67249b4 100644 --- a/controllers/me_following_boards_controller.go +++ b/controllers/me_following_boards_controller.go @@ -27,61 +27,41 @@ type MeFollowingBoardsFetchOptionals struct { // Fetch loads the boards that the authorized user follows // Endpoint: [GET] /v1/me/following/boards/ func (mfbc *MeFollowingBoardsController) Fetch(optionals *MeFollowingBoardsFetchOptionals) (*[]models.Board, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.Board{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Board{} request := mfbc.wreckerClient.Get("/me/following/boards/"). URLParam("fields", models.BOARD_FIELDS). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Board), &response.Page, nil + return resp.Data.(*[]models.Board), &resp.Page, nil } // Create follows a board for the authorized user // Endpoint: [POST] /v1/me/following/boards/ func (mfbc *MeFollowingBoardsController) Create(boardSpec string) error { - // Build request - response := new(models.Response) - request := mfbc.wreckerClient.Post("/me/following/boards/"). + // Build + execute request + resp := new(models.Response) + httpResp, err := mfbc.wreckerClient.Post("/me/following/boards/"). FormParam("board", boardSpec). - Into(response) + Into(resp). + Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK return nil } @@ -89,27 +69,17 @@ func (mfbc *MeFollowingBoardsController) Create(boardSpec string) error { // Delete unfollows a board for the authorized user // Endpoint: [DELETE] /v1/me/following/boards/ func (mfbc *MeFollowingBoardsController) Delete(boardSpec string) error { - // Build request - response := new(models.Response) - request := mfbc.wreckerClient.Delete("/me/following/boards/" + boardSpec + "/"). - Into(response) - - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Build + execute request + resp := new(models.Response) + httpResp, err := mfbc.wreckerClient.Delete("/me/following/boards/" + boardSpec + "/"). + Into(resp). + Execute() + + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK return nil } diff --git a/controllers/me_following_interests_controller.go b/controllers/me_following_interests_controller.go index c9c47fe..0065c19 100644 --- a/controllers/me_following_interests_controller.go +++ b/controllers/me_following_interests_controller.go @@ -27,32 +27,22 @@ type MeFollowingInterestsFetchOptionals struct { // Fetch loads the authorized users interests // Endpoint: [GET] /v1/me/following/interests/ func (mfic *MeFollowingInterestsController) Fetch(optionals *MeFollowingInterestsFetchOptionals) (*[]models.Interest, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.Interest{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Interest{} request := mfic.wreckerClient.Get("/me/following/interests/"). URLParam("fields", models.INTEREST_FIELDS). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Interest), &response.Page, nil + return resp.Data.(*[]models.Interest), &resp.Page, nil } diff --git a/controllers/me_following_users_controller.go b/controllers/me_following_users_controller.go index 687e2a1..0bb70b2 100644 --- a/controllers/me_following_users_controller.go +++ b/controllers/me_following_users_controller.go @@ -27,61 +27,41 @@ type FollowingUsersControllerFetchOptionals struct { // Fetch loads the users that the authorized user follows // Endpoint: [GET] /v1/me/following/users/ func (c *MeFollowingUsersController) Fetch(optionals *FollowingUsersControllerFetchOptionals) (*[]models.User, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.User{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.User{} request := c.wreckerClient.Get("/me/following/users/"). URLParam("fields", models.USER_FIELDS). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.User), &response.Page, nil + return resp.Data.(*[]models.User), &resp.Page, nil } // Create follows a user // Endpoint: [POST] /v1/me/following/users/ func (c *MeFollowingUsersController) Create(user string) error { - // Build request - response := new(models.Response) - request := c.wreckerClient.Post("/me/following/users/"). + // Build + execute request + resp := new(models.Response) + httpResp, err := c.wreckerClient.Post("/me/following/users/"). FormParam("user", user). - Into(response) + Into(resp). + Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK return nil } @@ -89,27 +69,17 @@ func (c *MeFollowingUsersController) Create(user string) error { // Delete unfollows a user // Endpoint: [DELETE] /v1/me/following/users/ func (c *MeFollowingUsersController) Delete(user string) error { - // Build request - response := new(models.Response) - request := c.wreckerClient.Delete("/me/following/users/" + user + "/"). - Into(response) - - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Build + execute request + resp := new(models.Response) + httpResp, err := c.wreckerClient.Delete("/me/following/users/" + user + "/"). + Into(resp). + Execute() + + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK return nil } diff --git a/controllers/me_likes_controller.go b/controllers/me_likes_controller.go index f89a836..874732c 100644 --- a/controllers/me_likes_controller.go +++ b/controllers/me_likes_controller.go @@ -27,32 +27,22 @@ type MeLikesFetchOptionals struct { // Fetch loads all of the pins that the authorized user has liked // Endpoint: [GET] /v1/me/likes/ func (mlc *MeLikesController) Fetch(optionals *MeLikesFetchOptionals) (*[]models.Pin, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.Pin{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Pin{} request := mlc.wreckerClient.Get("/me/likes/"). URLParam("fields", models.PIN_FIELDS). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Pin), &response.Page, nil + return resp.Data.(*[]models.Pin), &resp.Page, nil } diff --git a/controllers/me_pins_controller.go b/controllers/me_pins_controller.go index 19010f0..2e2aaac 100644 --- a/controllers/me_pins_controller.go +++ b/controllers/me_pins_controller.go @@ -27,32 +27,22 @@ type MePinsFetchOptionals struct { // Fetch loads all of the logged in user's Pins // Endpoint: [GET] /v1/me/pins/ func (mpc *MePinsController) Fetch(optionals *MePinsFetchOptionals) (*[]models.Pin, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.Pin{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Pin{} request := mpc.wreckerClient.Get("/me/pins/"). URLParam("fields", models.PIN_FIELDS). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Pin), &response.Page, nil + return resp.Data.(*[]models.Pin), &resp.Page, nil } diff --git a/controllers/me_search_boards_controller.go b/controllers/me_search_boards_controller.go index cfb524c..d490d11 100644 --- a/controllers/me_search_boards_controller.go +++ b/controllers/me_search_boards_controller.go @@ -29,36 +29,26 @@ type MeSearchBoardsFetchOptionals struct { // Fetch searches the logged in user's Boards // Endpoint: [GET] /v1/me/search/boards/ func (msbc *MeSearchBoardsController) Fetch(query string, optionals *MeSearchBoardsFetchOptionals) (*[]models.Board, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.Board{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Board{} request := msbc.wreckerClient.Get("/me/search/boards/"). URLParam("fields", models.BOARD_FIELDS). URLParam("query", query). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } if optionals.Limit != 0 { request.URLParam("limit", strconv.Itoa(optionals.Limit)) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Board), &response.Page, nil + return resp.Data.(*[]models.Board), &resp.Page, nil } diff --git a/controllers/me_search_pins_controller.go b/controllers/me_search_pins_controller.go index 7ff75ab..592dc8a 100644 --- a/controllers/me_search_pins_controller.go +++ b/controllers/me_search_pins_controller.go @@ -29,36 +29,26 @@ type MeSearchPinsFetchOptionals struct { // Fetch searches the logged in user's Pins // Endpoint: [GET] /v1/me/search/pins/ func (mspc *MeSearchPinsController) Fetch(query string, optionals *MeSearchPinsFetchOptionals) (*[]models.Pin, *models.Page, error) { - // Build request - response := new(models.Response) - response.Data = &[]models.Pin{} + // Build + execute request + resp := new(models.Response) + resp.Data = &[]models.Pin{} request := mspc.wreckerClient.Get("/me/search/pins/"). URLParam("fields", models.PIN_FIELDS). URLParam("query", query). - Into(response) + Into(resp) if optionals.Cursor != "" { request.URLParam("cursor", optionals.Cursor) } if optionals.Limit != 0 { request.URLParam("limit", strconv.Itoa(optionals.Limit)) } + httpResp, err := request.Execute() - // Execute request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*[]models.Pin), &response.Page, nil + return resp.Data.(*[]models.Pin), &resp.Page, nil } diff --git a/controllers/pins_controller.go b/controllers/pins_controller.go index 280a5e7..66ad703 100644 --- a/controllers/pins_controller.go +++ b/controllers/pins_controller.go @@ -24,30 +24,21 @@ func NewPinsController(wc *wrecker.Wrecker) *PinsController { // Fetch loads a pin from the pin id // Endpoint: [GET] /v1/pins// func (pc *PinsController) Fetch(pinId string) (*models.Pin, error) { - // Make request - response := new(models.Response) - response.Data = new(models.Pin) - - resp, err := pc.wreckerClient.Get("/pins/"+pinId+"/"). + // Build + execute request + resp := new(models.Response) + resp.Data = new(models.Pin) + httpResp, err := pc.wreckerClient.Get("/pins/"+pinId+"/"). URLParam("fields", models.PIN_FIELDS). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.Pin), nil + return resp.Data.(*models.Pin), nil } // PinCreateOptionals is a struct that represents the optional parameters @@ -61,14 +52,14 @@ type PinCreateOptionals struct { // Create creates a new pin // Endpoint: [POST] /v1/pins/ func (pc *PinsController) Create(boardSpec string, note string, optionals *PinCreateOptionals) (*models.Pin, error) { - // Build Request - response := new(models.Response) - response.Data = new(models.Pin) + // Build + execute request + resp := new(models.Response) + resp.Data = new(models.Pin) request := pc.wreckerClient.Post("/pins/"). URLParam("fields", models.PIN_FIELDS). FormParam("board", boardSpec). FormParam("note", note). - Into(response) + Into(resp) if optionals.Link != "" { request.FormParam("link", optionals.Link) } @@ -88,25 +79,15 @@ func (pc *PinsController) Create(boardSpec string, note string, optionals *PinCr imageBase64Str := base64.StdEncoding.EncodeToString(buf) request.FormParam("image_base64", imageBase64Str) } + httpResp, err := request.Execute() - // Execute Request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.Pin), nil + return resp.Data.(*models.Pin), nil } // PinUpdateOptionals is a struct that represents the optional parameters @@ -120,12 +101,12 @@ type PinUpdateOptionals struct { // Update updates an existing pin // Endpoint: [PATCH] /v1/pins// func (pc *PinsController) Update(pinId string, optionals *PinUpdateOptionals) (*models.Pin, error) { - // Build request - response := new(models.Response) - response.Data = new(models.Pin) + // Build + execute request + resp := new(models.Response) + resp.Data = new(models.Pin) request := pc.wreckerClient.Patch("/pins/"+pinId+"/"). URLParam("fields", models.PIN_FIELDS). - Into(response) + Into(resp) if optionals.Board != "" { request.FormParam("board", optionals.Board) } @@ -135,47 +116,29 @@ func (pc *PinsController) Update(pinId string, optionals *PinUpdateOptionals) (* if optionals.Link != "" { request.FormParam("link", optionals.Link) } + httpResp, err := request.Execute() - // Execute Request - resp, err := request.Execute() - - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.Pin), nil + return resp.Data.(*models.Pin), nil } // Delete deletes an existing pin // Endpoint: [DELETE] /v1/pins// func (pc *PinsController) Delete(pinId string) error { // Execute Request - response := new(models.Response) - resp, err := pc.wreckerClient.Delete("/pins/" + pinId + "/").Execute() + resp := new(models.Response) + httpResp, err := pc.wreckerClient.Delete("/pins/" + pinId + "/").Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK return nil } diff --git a/controllers/users_controller.go b/controllers/users_controller.go index c7eda03..aee7ec9 100644 --- a/controllers/users_controller.go +++ b/controllers/users_controller.go @@ -21,27 +21,19 @@ func NewUsersController(wc *wrecker.Wrecker) *UsersController { // Fetch loads a user from their username. // Endpoint: [GET] /v1/users// func (uc *UsersController) Fetch(username string) (*models.User, error) { - response := new(models.Response) - response.Data = new(models.User) - - resp, err := uc.wreckerClient.Get("/users/"+username+"/"). + // Build + execute request + resp := new(models.Response) + resp.Data = new(models.User) + httpResp, err := uc.wreckerClient.Get("/users/"+username+"/"). URLParam("fields", models.USER_FIELDS). - Into(response). + Into(resp). Execute() - // Error from Wrecker - if err != nil { + // Check Error + if err = models.WrapPinterestError(httpResp, resp, err); err != nil { return nil, err } - // Status code - if !(resp.StatusCode >= 200 && resp.StatusCode < 300) { - return nil, &models.PinterestError{ - StatusCode: resp.StatusCode, - Message: response.Message, - } - } - // OK - return response.Data.(*models.User), nil + return resp.Data.(*models.User), nil } diff --git a/models/pinterest_error.go b/models/pinterest_error.go index 969a846..234fbc4 100644 --- a/models/pinterest_error.go +++ b/models/pinterest_error.go @@ -2,6 +2,7 @@ package models import ( "encoding/json" + "net/http" ) // PinterestError is a custom error that is passed for all @@ -15,3 +16,20 @@ func (e *PinterestError) Error() string { out, _ := json.Marshal(e) return "PinterestError: " + string(out) } + +// WrapPinterestError takes a *http.Response and a Response and returns a +// PinterestError if one should be returned. +func WrapPinterestError(httpResponse *http.Response, bodyResponse *Response, err error) error { + if err != nil { + return err + } + + if !(httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300) { + return &PinterestError{ + StatusCode: httpResponse.StatusCode, + Message: bodyResponse.Message, + } + } + + return nil +}