Skip to content

Instantly share code, notes, and snippets.

@arbarlow
Created April 23, 2015 15:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arbarlow/8f145f8709c7bd614cce to your computer and use it in GitHub Desktop.
Save arbarlow/8f145f8709c7bd614cce to your computer and use it in GitHub Desktop.
package controllers
import (
"encoding/json"
"io"
"net/http"
"github.com/go-martini/martini"
"github.com/jinzhu/gorm"
"github.com/jrallison/go-workers"
"github.com/martini-contrib/render"
. "github.com/madebymany/riru/models"
)
func ReelsControllerRouter(r martini.Router) {
r.Get("", ReelsIndex)
r.Post("", ReelsCreate)
r.Put("/:id", ReelsUpdate)
r.Patch("/:id", ReelsUpdate)
r.Delete("/:id", ReelsDelete)
}
func ReelsIndex(r render.Render, db gorm.DB, user User) {
var reels []Reel
db.Model(&user).Preload("Owner").Related(&reels, "OwnerID")
r.JSON(http.StatusOK, reels)
}
func ReelsCreate(r render.Render, req *http.Request, db gorm.DB, user User) {
form := parseReel(req.Body)
reel := Reel{
Name: form.Name,
AuthProviderID: form.AuthProviderID,
Folder: form.Folder,
Owner: user,
}
db.Create(&reel)
if !db.NewRecord(reel) {
r.JSON(http.StatusCreated, reel)
} else {
r.JSON(http.StatusBadRequest, reel)
}
}
func ReelsUpdate(r render.Render, req *http.Request, db gorm.DB, params martini.Params, user User) {
reel, err := findReel(user, db, params["id"])
if err != nil {
r.Error(http.StatusNotFound)
return
}
form := parseReel(req.Body)
reel.Name = form.Name
result := db.Save(&reel)
if result.Error == nil {
r.JSON(http.StatusOK, reel)
} else {
r.JSON(http.StatusBadRequest, result)
}
}
func ReelsDelete(r render.Render, db gorm.DB, params martini.Params, user User) {
reel, err := findReel(user, db, params["id"])
if err != nil {
r.Error(http.StatusNotFound)
return
}
result := db.Delete(&reel)
if result.Error == nil {
r.Status(http.StatusOK)
} else {
r.JSON(http.StatusBadRequest, result.Error)
}
}
// helper methods
func findReel(user User, db gorm.DB, id string) (*Reel, error) {
var reel Reel
result := db.Where(&Reel{ID: id, OwnerID: user.ID}).First(&reel)
return &reel, result.Error
}
func parseReel(body io.ReadCloser) ReelForm {
decoder := json.NewDecoder(body)
var form ReelForm
decoder.Decode(&form)
return form
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment