Skip to content

Commit

Permalink
Refactor HTTP response builder
Browse files Browse the repository at this point in the history
  • Loading branch information
fguillot committed Oct 8, 2018
1 parent ddfe969 commit 1f58b37
Show file tree
Hide file tree
Showing 94 changed files with 1,702 additions and 645 deletions.
29 changes: 14 additions & 15 deletions api/category.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,28 @@ import (
func (c *Controller) CreateCategory(w http.ResponseWriter, r *http.Request) {
category, err := decodeCategoryPayload(r.Body)
if err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

userID := request.UserID(r)
category.UserID = userID
if err := category.ValidateCategoryCreation(); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

if c, err := c.store.CategoryByTitle(userID, category.Title); err != nil || c != nil {
json.BadRequest(w, errors.New("This category already exists"))
json.BadRequest(w, r, errors.New("This category already exists"))
return
}

err = c.store.CreateCategory(category)
if err != nil {
json.ServerError(w, err)
if err := c.store.CreateCategory(category); err != nil {
json.ServerError(w, r, err)
return
}

json.Created(w, category)
json.Created(w, r, category)
}

// UpdateCategory is the API handler to update a category.
Expand All @@ -47,31 +46,31 @@ func (c *Controller) UpdateCategory(w http.ResponseWriter, r *http.Request) {

category, err := decodeCategoryPayload(r.Body)
if err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

category.UserID = request.UserID(r)
category.ID = categoryID
if err := category.ValidateCategoryModification(); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

err = c.store.UpdateCategory(category)
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

json.Created(w, category)
json.Created(w, r, category)
}

// GetCategories is the API handler to get a list of categories for a given user.
func (c *Controller) GetCategories(w http.ResponseWriter, r *http.Request) {
categories, err := c.store.Categories(request.UserID(r))
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

Expand All @@ -84,14 +83,14 @@ func (c *Controller) RemoveCategory(w http.ResponseWriter, r *http.Request) {
categoryID := request.RouteInt64Param(r, "categoryID")

if !c.store.CategoryExists(userID, categoryID) {
json.NotFound(w, errors.New("Category not found"))
json.NotFound(w, r)
return
}

if err := c.store.RemoveCategory(userID, categoryID); err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

json.NoContent(w)
json.NoContent(w, r)
}
44 changes: 22 additions & 22 deletions api/entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ func (c *Controller) GetFeedEntry(w http.ResponseWriter, r *http.Request) {

entry, err := builder.GetEntry()
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

if entry == nil {
json.NotFound(w, errors.New("Entry not found"))
json.NotFound(w, r)
return
}

Expand All @@ -46,12 +46,12 @@ func (c *Controller) GetEntry(w http.ResponseWriter, r *http.Request) {

entry, err := builder.GetEntry()
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

if entry == nil {
json.NotFound(w, errors.New("Entry not found"))
json.NotFound(w, r)
return
}

Expand All @@ -65,27 +65,27 @@ func (c *Controller) GetFeedEntries(w http.ResponseWriter, r *http.Request) {
status := request.QueryStringParam(r, "status", "")
if status != "" {
if err := model.ValidateEntryStatus(status); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}
}

order := request.QueryStringParam(r, "order", model.DefaultSortingOrder)
if err := model.ValidateEntryOrder(order); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

direction := request.QueryStringParam(r, "direction", model.DefaultSortingDirection)
if err := model.ValidateDirection(direction); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

limit := request.QueryIntParam(r, "limit", 100)
offset := request.QueryIntParam(r, "offset", 0)
if err := model.ValidateRange(offset, limit); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

Expand All @@ -100,13 +100,13 @@ func (c *Controller) GetFeedEntries(w http.ResponseWriter, r *http.Request) {

entries, err := builder.GetEntries()
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

count, err := builder.CountEntries()
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

Expand All @@ -118,27 +118,27 @@ func (c *Controller) GetEntries(w http.ResponseWriter, r *http.Request) {
status := request.QueryStringParam(r, "status", "")
if status != "" {
if err := model.ValidateEntryStatus(status); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}
}

order := request.QueryStringParam(r, "order", model.DefaultSortingOrder)
if err := model.ValidateEntryOrder(order); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

direction := request.QueryStringParam(r, "direction", model.DefaultSortingDirection)
if err := model.ValidateDirection(direction); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

limit := request.QueryIntParam(r, "limit", 100)
offset := request.QueryIntParam(r, "offset", 0)
if err := model.ValidateRange(offset, limit); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

Expand All @@ -152,13 +152,13 @@ func (c *Controller) GetEntries(w http.ResponseWriter, r *http.Request) {

entries, err := builder.GetEntries()
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

count, err := builder.CountEntries()
if err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

Expand All @@ -169,32 +169,32 @@ func (c *Controller) GetEntries(w http.ResponseWriter, r *http.Request) {
func (c *Controller) SetEntryStatus(w http.ResponseWriter, r *http.Request) {
entryIDs, status, err := decodeEntryStatusPayload(r.Body)
if err != nil {
json.BadRequest(w, errors.New("Invalid JSON payload"))
json.BadRequest(w , r, errors.New("Invalid JSON payload"))
return
}

if err := model.ValidateEntryStatus(status); err != nil {
json.BadRequest(w, err)
json.BadRequest(w, r, err)
return
}

if err := c.store.SetEntriesStatus(request.UserID(r), entryIDs, status); err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

json.NoContent(w)
json.NoContent(w, r)
}

// ToggleBookmark is the API handler to toggle bookmark status.
func (c *Controller) ToggleBookmark(w http.ResponseWriter, r *http.Request) {
entryID := request.RouteInt64Param(r, "entryID")
if err := c.store.ToggleBookmark(request.UserID(r), entryID); err != nil {
json.ServerError(w, err)
json.ServerError(w, r, err)
return
}

json.NoContent(w)
json.NoContent(w, r)
}

func configureFilters(builder *storage.EntryQueryBuilder, r *http.Request) {
Expand Down
Loading

0 comments on commit 1f58b37

Please sign in to comment.