missing routers

This commit is contained in:
Pedro Nasser
2016-07-21 16:09:21 -03:00
parent 66fa3d4035
commit 154fd82b68
15 changed files with 379 additions and 1 deletions

1
.gitignore vendored
View File

@@ -5,7 +5,6 @@ iron.json
dj.config.json
dj.cluster.*.json
script.tar.gz
router
app.zip
/app
vendor/

View File

@@ -0,0 +1,32 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleAppCreate(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
app := &models.App{}
err := c.BindJSON(app)
if err != nil {
log.WithError(err).Debug(models.ErrInvalidJSON)
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
return
}
app, err = store.StoreApp(app)
if err != nil {
log.WithError(err).Debug(models.ErrAppsCreate)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsCreate))
return
}
c.JSON(http.StatusOK, app)
}

View File

@@ -0,0 +1,25 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleAppDestroy(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
appName := c.Param("app")
err := store.RemoveApp(appName)
if err != nil {
log.WithError(err).Debug(models.ErrAppsRemoving)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsRemoving))
return
}
c.JSON(http.StatusOK, nil)
}

View File

@@ -0,0 +1,31 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleAppGet(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
appName := c.Param("app")
app, err := store.GetApp(appName)
if err != nil {
log.WithError(err).Error(models.ErrAppsGet)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsGet))
return
}
if app == nil {
log.WithError(err).Error(models.ErrAppsNotFound)
c.JSON(http.StatusNotFound, simpleError(models.ErrAppsNotFound))
return
}
c.JSON(http.StatusOK, app)
}

View File

@@ -0,0 +1,25 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleAppList(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
filter := &models.AppFilter{}
apps, err := store.GetApps(filter)
if err != nil {
log.WithError(err).Debug(models.ErrAppsList)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsList))
return
}
c.JSON(http.StatusOK, apps)
}

View File

@@ -0,0 +1,34 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleAppUpdate(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
app := &models.App{}
err := c.BindJSON(app)
if err != nil {
log.WithError(err).Debug(models.ErrInvalidJSON)
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
return
}
app.Name = c.Param("app")
app, err = store.StoreApp(app)
if err != nil {
log.WithError(err).Debug(models.ErrAppsUpdate)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsUpdate))
return
}
c.JSON(http.StatusOK, app)
}

11
api/server/router/ping.go Normal file
View File

@@ -0,0 +1,11 @@
package router
import (
"net/http"
"github.com/gin-gonic/gin"
)
func handlePing(c *gin.Context) {
c.JSON(http.StatusNotImplemented, "Not Implemented")
}

View File

@@ -0,0 +1,37 @@
package router
import (
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func Start(engine *gin.Engine) {
engine.GET("/", handlePing)
engine.GET("/version", handleVersion)
v1 := engine.Group("/v1")
{
v1.GET("/apps", handleAppList)
v1.POST("/apps", handleAppCreate)
v1.GET("/apps/:app", handleAppGet)
v1.POST("/apps/:app", handleAppUpdate)
v1.DELETE("/apps/:app", handleAppDestroy)
apps := v1.Group("/apps/:app")
{
apps.GET("/routes", handleRouteList)
apps.POST("/routes", handleRouteCreate)
apps.GET("/routes/:route", handleRouteGet)
apps.POST("/routes/:route", handleRouteUpdate)
apps.DELETE("/routes/:route", handleRouteDestroy)
}
}
engine.GET("/r/:app/*route", handleRunner)
}
func simpleError(err error) *models.Error {
return &models.Error{&models.ErrorBody{Message: err.Error()}}
}

View File

@@ -0,0 +1,34 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleRouteCreate(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
route := &models.Route{}
err := c.BindJSON(route)
if err != nil {
log.WithError(err).Debug(models.ErrInvalidJSON)
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
return
}
route.AppName = c.Param("app")
route, err = store.StoreRoute(route)
if err != nil {
log.WithError(err).Debug(models.ErrRoutesCreate)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesCreate))
return
}
c.JSON(http.StatusOK, route)
}

View File

@@ -0,0 +1,26 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleRouteDestroy(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
appName := c.Param("app")
routeName := c.Param("route")
err := store.RemoveRoute(appName, routeName)
if err != nil {
log.WithError(err).Debug(models.ErrRoutesRemoving)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesRemoving))
return
}
c.JSON(http.StatusOK, nil)
}

View File

@@ -0,0 +1,28 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleRouteGet(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
appName := c.Param("app")
routeName := c.Param("route")
route, err := store.GetRoute(appName, routeName)
if err != nil {
log.WithError(err).Error(models.ErrRoutesGet)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesGet))
return
}
log.WithFields(logrus.Fields{"route": route}).Debug("Got route")
c.JSON(http.StatusOK, route)
}

View File

@@ -0,0 +1,31 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleRouteList(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
appName := c.Param("app")
filter := &models.RouteFilter{
AppName: appName,
}
routes, err := store.GetRoutes(filter)
if err != nil {
log.WithError(err).Error(models.ErrRoutesGet)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesGet))
return
}
log.WithFields(logrus.Fields{"routes": routes}).Debug("Got routes")
c.JSON(http.StatusOK, routes)
}

View File

@@ -0,0 +1,35 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/models"
)
func handleRouteUpdate(c *gin.Context) {
store := c.MustGet("store").(models.Datastore)
log := c.MustGet("log").(logrus.FieldLogger)
route := &models.Route{}
appName := c.Param("app")
err := c.BindJSON(route)
if err != nil {
log.WithError(err).Debug(models.ErrInvalidJSON)
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
return
}
route.AppName = appName
route, err = store.StoreRoute(route)
if err != nil {
log.WithError(err).Debug(models.ErrAppsCreate)
c.JSON(http.StatusInternalServerError, simpleError(models.ErrAppsCreate))
return
}
c.JSON(http.StatusOK, route)
}

View File

@@ -0,0 +1,19 @@
package router
import (
"net/http"
"github.com/Sirupsen/logrus"
"github.com/gin-gonic/gin"
"github.com/iron-io/functions/api/runner"
)
func handleRunner(c *gin.Context) {
log := c.MustGet("log").(logrus.FieldLogger)
err := runner.Run(c)
if err != nil {
log.Debug(err)
c.JSON(http.StatusInternalServerError, simpleError(err))
}
}

View File

@@ -0,0 +1,11 @@
package router
import (
"net/http"
"github.com/gin-gonic/gin"
)
func handleVersion(c *gin.Context) {
c.JSON(http.StatusNotImplemented, "Not Implemented")
}