From 9d08139f4363d3503398002bc82cb3746e3438cf Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sun, 23 Sep 2018 21:02:26 -0700 Subject: Improve request package and add more unit tests --- api/category.go | 12 ++---------- api/entry.go | 47 ++++++++++++----------------------------------- api/feed.go | 30 +++++------------------------- api/icon.go | 6 +----- api/user.go | 23 ++++------------------- 5 files changed, 24 insertions(+), 94 deletions(-) (limited to 'api') diff --git a/api/category.go b/api/category.go index e74aa3b..b8699e2 100644 --- a/api/category.go +++ b/api/category.go @@ -43,11 +43,7 @@ func (c *Controller) CreateCategory(w http.ResponseWriter, r *http.Request) { // UpdateCategory is the API handler to update a category. func (c *Controller) UpdateCategory(w http.ResponseWriter, r *http.Request) { - categoryID, err := request.IntParam(r, "categoryID") - if err != nil { - json.BadRequest(w, err) - return - } + categoryID := request.RouteInt64Param(r, "categoryID") category, err := decodeCategoryPayload(r.Body) if err != nil { @@ -85,11 +81,7 @@ func (c *Controller) GetCategories(w http.ResponseWriter, r *http.Request) { // RemoveCategory is the API handler to remove a category. func (c *Controller) RemoveCategory(w http.ResponseWriter, r *http.Request) { userID := request.UserID(r) - categoryID, err := request.IntParam(r, "categoryID") - if err != nil { - json.BadRequest(w, err) - return - } + categoryID := request.RouteInt64Param(r, "categoryID") if !c.store.CategoryExists(userID, categoryID) { json.NotFound(w, errors.New("Category not found")) diff --git a/api/entry.go b/api/entry.go index 7f87888..a1ea87f 100644 --- a/api/entry.go +++ b/api/entry.go @@ -17,17 +17,8 @@ import ( // GetFeedEntry is the API handler to get a single feed entry. func (c *Controller) GetFeedEntry(w http.ResponseWriter, r *http.Request) { - feedID, err := request.IntParam(r, "feedID") - if err != nil { - json.BadRequest(w, err) - return - } - - entryID, err := request.IntParam(r, "entryID") - if err != nil { - json.BadRequest(w, err) - return - } + feedID := request.RouteInt64Param(r, "feedID") + entryID := request.RouteInt64Param(r, "entryID") builder := c.store.NewEntryQueryBuilder(request.UserID(r)) builder.WithFeedID(feedID) @@ -49,12 +40,7 @@ func (c *Controller) GetFeedEntry(w http.ResponseWriter, r *http.Request) { // GetEntry is the API handler to get a single entry. func (c *Controller) GetEntry(w http.ResponseWriter, r *http.Request) { - entryID, err := request.IntParam(r, "entryID") - if err != nil { - json.BadRequest(w, err) - return - } - + entryID := request.RouteInt64Param(r, "entryID") builder := c.store.NewEntryQueryBuilder(request.UserID(r)) builder.WithEntryID(entryID) @@ -74,13 +60,9 @@ func (c *Controller) GetEntry(w http.ResponseWriter, r *http.Request) { // GetFeedEntries is the API handler to get all feed entries. func (c *Controller) GetFeedEntries(w http.ResponseWriter, r *http.Request) { - feedID, err := request.IntParam(r, "feedID") - if err != nil { - json.BadRequest(w, err) - return - } + feedID := request.RouteInt64Param(r, "feedID") - status := request.QueryParam(r, "status", "") + status := request.QueryStringParam(r, "status", "") if status != "" { if err := model.ValidateEntryStatus(status); err != nil { json.BadRequest(w, err) @@ -88,13 +70,13 @@ func (c *Controller) GetFeedEntries(w http.ResponseWriter, r *http.Request) { } } - order := request.QueryParam(r, "order", model.DefaultSortingOrder) + order := request.QueryStringParam(r, "order", model.DefaultSortingOrder) if err := model.ValidateEntryOrder(order); err != nil { json.BadRequest(w, err) return } - direction := request.QueryParam(r, "direction", model.DefaultSortingDirection) + direction := request.QueryStringParam(r, "direction", model.DefaultSortingDirection) if err := model.ValidateDirection(direction); err != nil { json.BadRequest(w, err) return @@ -133,7 +115,7 @@ func (c *Controller) GetFeedEntries(w http.ResponseWriter, r *http.Request) { // GetEntries is the API handler to fetch entries. func (c *Controller) GetEntries(w http.ResponseWriter, r *http.Request) { - status := request.QueryParam(r, "status", "") + status := request.QueryStringParam(r, "status", "") if status != "" { if err := model.ValidateEntryStatus(status); err != nil { json.BadRequest(w, err) @@ -141,13 +123,13 @@ func (c *Controller) GetEntries(w http.ResponseWriter, r *http.Request) { } } - order := request.QueryParam(r, "order", model.DefaultSortingOrder) + order := request.QueryStringParam(r, "order", model.DefaultSortingOrder) if err := model.ValidateEntryOrder(order); err != nil { json.BadRequest(w, err) return } - direction := request.QueryParam(r, "direction", model.DefaultSortingDirection) + direction := request.QueryStringParam(r, "direction", model.DefaultSortingDirection) if err := model.ValidateDirection(direction); err != nil { json.BadRequest(w, err) return @@ -206,12 +188,7 @@ func (c *Controller) SetEntryStatus(w http.ResponseWriter, r *http.Request) { // ToggleBookmark is the API handler to toggle bookmark status. func (c *Controller) ToggleBookmark(w http.ResponseWriter, r *http.Request) { - entryID, err := request.IntParam(r, "entryID") - if err != nil { - json.BadRequest(w, err) - return - } - + entryID := request.RouteInt64Param(r, "entryID") if err := c.store.ToggleBookmark(request.UserID(r), entryID); err != nil { json.ServerError(w, err) return @@ -245,7 +222,7 @@ func configureFilters(builder *storage.EntryQueryBuilder, r *http.Request) { builder.WithStarred() } - searchQuery := request.QueryParam(r, "search", "") + searchQuery := request.QueryStringParam(r, "search", "") if searchQuery != "" { builder.WithSearchQuery(searchQuery) } diff --git a/api/feed.go b/api/feed.go index 17bb73d..d193d2e 100644 --- a/api/feed.go +++ b/api/feed.go @@ -65,12 +65,7 @@ func (c *Controller) CreateFeed(w http.ResponseWriter, r *http.Request) { // RefreshFeed is the API handler to refresh a feed. func (c *Controller) RefreshFeed(w http.ResponseWriter, r *http.Request) { - feedID, err := request.IntParam(r, "feedID") - if err != nil { - json.BadRequest(w, err) - return - } - + feedID := request.RouteInt64Param(r, "feedID") userID := request.UserID(r) if !c.store.FeedExists(userID, feedID) { @@ -78,7 +73,7 @@ func (c *Controller) RefreshFeed(w http.ResponseWriter, r *http.Request) { return } - err = c.feedHandler.RefreshFeed(userID, feedID) + err := c.feedHandler.RefreshFeed(userID, feedID) if err != nil { json.ServerError(w, err) return @@ -89,12 +84,7 @@ func (c *Controller) RefreshFeed(w http.ResponseWriter, r *http.Request) { // UpdateFeed is the API handler that is used to update a feed. func (c *Controller) UpdateFeed(w http.ResponseWriter, r *http.Request) { - feedID, err := request.IntParam(r, "feedID") - if err != nil { - json.BadRequest(w, err) - return - } - + feedID := request.RouteInt64Param(r, "feedID") feedChanges, err := decodeFeedModificationPayload(r.Body) if err != nil { json.BadRequest(w, err) @@ -148,12 +138,7 @@ func (c *Controller) GetFeeds(w http.ResponseWriter, r *http.Request) { // GetFeed is the API handler to get a feed. func (c *Controller) GetFeed(w http.ResponseWriter, r *http.Request) { - feedID, err := request.IntParam(r, "feedID") - if err != nil { - json.BadRequest(w, err) - return - } - + feedID := request.RouteInt64Param(r, "feedID") feed, err := c.store.FeedByID(request.UserID(r), feedID) if err != nil { json.ServerError(w, err) @@ -170,12 +155,7 @@ func (c *Controller) GetFeed(w http.ResponseWriter, r *http.Request) { // RemoveFeed is the API handler to remove a feed. func (c *Controller) RemoveFeed(w http.ResponseWriter, r *http.Request) { - feedID, err := request.IntParam(r, "feedID") - if err != nil { - json.BadRequest(w, err) - return - } - + feedID := request.RouteInt64Param(r, "feedID") userID := request.UserID(r) if !c.store.FeedExists(userID, feedID) { diff --git a/api/icon.go b/api/icon.go index f9c2964..de01fad 100644 --- a/api/icon.go +++ b/api/icon.go @@ -14,11 +14,7 @@ import ( // FeedIcon returns a feed icon. func (c *Controller) FeedIcon(w http.ResponseWriter, r *http.Request) { - feedID, err := request.IntParam(r, "feedID") - if err != nil { - json.BadRequest(w, err) - return - } + feedID := request.RouteInt64Param(r, "feedID") if !c.store.HasIcon(feedID) { json.NotFound(w, errors.New("This feed doesn't have any icon")) diff --git a/api/user.go b/api/user.go index 167fd72..b9274bb 100644 --- a/api/user.go +++ b/api/user.go @@ -63,12 +63,7 @@ func (c *Controller) UpdateUser(w http.ResponseWriter, r *http.Request) { return } - userID, err := request.IntParam(r, "userID") - if err != nil { - json.BadRequest(w, err) - return - } - + userID := request.RouteInt64Param(r, "userID") userChanges, err := decodeUserModificationPayload(r.Body) if err != nil { json.BadRequest(w, err) @@ -124,12 +119,7 @@ func (c *Controller) UserByID(w http.ResponseWriter, r *http.Request) { return } - userID, err := request.IntParam(r, "userID") - if err != nil { - json.BadRequest(w, err) - return - } - + userID := request.RouteInt64Param(r, "userID") user, err := c.store.UserByID(userID) if err != nil { json.BadRequest(w, errors.New("Unable to fetch this user from the database")) @@ -152,7 +142,7 @@ func (c *Controller) UserByUsername(w http.ResponseWriter, r *http.Request) { return } - username := request.Param(r, "username", "") + username := request.RouteStringParam(r, "username") user, err := c.store.UserByUsername(username) if err != nil { json.BadRequest(w, errors.New("Unable to fetch this user from the database")) @@ -174,12 +164,7 @@ func (c *Controller) RemoveUser(w http.ResponseWriter, r *http.Request) { return } - userID, err := request.IntParam(r, "userID") - if err != nil { - json.BadRequest(w, err) - return - } - + userID := request.RouteInt64Param(r, "userID") user, err := c.store.UserByID(userID) if err != nil { json.ServerError(w, err) -- cgit v1.2.3