admin: Use gin-gonic as router
This commit is contained in:
parent
83468ad723
commit
8b3fbdb64a
32 changed files with 2748 additions and 1598 deletions
|
|
@ -3,22 +3,45 @@ package api
|
|||
import (
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"path"
|
||||
"strconv"
|
||||
|
||||
"srs.epita.fr/fic-server/libfic"
|
||||
|
||||
"github.com/julienschmidt/httprouter"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func init() {
|
||||
router.GET("/api/events/", apiHandler(getEvents))
|
||||
router.GET("/api/events.json", apiHandler(getLastEvents))
|
||||
router.POST("/api/events/", apiHandler(newEvent))
|
||||
router.DELETE("/api/events/", apiHandler(clearEvents))
|
||||
func declareEventsRoutes(router *gin.RouterGroup) {
|
||||
router.GET("/events", getEvents)
|
||||
router.GET("/events.json", getLastEvents)
|
||||
router.POST("/events", newEvent)
|
||||
router.DELETE("/events", clearEvents)
|
||||
|
||||
router.GET("/api/events/:evid", apiHandler(eventHandler(showEvent)))
|
||||
router.PUT("/api/events/:evid", apiHandler(eventHandler(updateEvent)))
|
||||
router.DELETE("/api/events/:evid", apiHandler(eventHandler(deleteEvent)))
|
||||
apiEventsRoutes := router.Group("/events/:evid")
|
||||
apiEventsRoutes.Use(EventHandler)
|
||||
apiEventsRoutes.GET("", showEvent)
|
||||
apiEventsRoutes.PUT("", updateEvent)
|
||||
apiEventsRoutes.DELETE("", deleteEvent)
|
||||
}
|
||||
|
||||
func EventHandler(c *gin.Context) {
|
||||
evid, err := strconv.ParseInt(string(c.Params.ByName("evid")), 10, 64)
|
||||
if err != nil {
|
||||
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": "Invalid event identifier"})
|
||||
return
|
||||
}
|
||||
|
||||
event, err := fic.GetEvent(evid)
|
||||
if err != nil {
|
||||
c.AbortWithStatusJSON(http.StatusNotFound, gin.H{"errmsg": "Event not found"})
|
||||
return
|
||||
}
|
||||
|
||||
c.Set("event", event)
|
||||
|
||||
c.Next()
|
||||
}
|
||||
|
||||
func genEventsFile() error {
|
||||
|
|
@ -33,65 +56,99 @@ func genEventsFile() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func getEvents(_ httprouter.Params, _ []byte) (interface{}, error) {
|
||||
if evts, err := fic.GetEvents(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return evts, nil
|
||||
func getEvents(c *gin.Context) {
|
||||
evts, err := fic.GetEvents()
|
||||
if err != nil {
|
||||
log.Println("Unable to GetEvents:", err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to retrieve events list"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, evts)
|
||||
}
|
||||
|
||||
func getLastEvents(_ httprouter.Params, _ []byte) (interface{}, error) {
|
||||
if evts, err := fic.GetLastEvents(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return evts, nil
|
||||
func getLastEvents(c *gin.Context) {
|
||||
evts, err := fic.GetLastEvents()
|
||||
|
||||
if err != nil {
|
||||
log.Println("Unable to GetLastEvents:", err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to retrieve last events list"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, evts)
|
||||
}
|
||||
|
||||
func showEvent(event *fic.Event, _ []byte) (interface{}, error) {
|
||||
return event, nil
|
||||
}
|
||||
|
||||
func newEvent(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||
func newEvent(c *gin.Context) {
|
||||
var ue fic.Event
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
err := c.ShouldBindJSON(&ue)
|
||||
if err != nil {
|
||||
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if event, err := fic.NewEvent(ue.Text, ue.Kind); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
genEventsFile()
|
||||
return event, nil
|
||||
event, err := fic.NewEvent(ue.Text, ue.Kind)
|
||||
if err != nil {
|
||||
log.Printf("Unable to newEvent: %s", err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during event creation."})
|
||||
return
|
||||
}
|
||||
|
||||
genEventsFile()
|
||||
|
||||
c.JSON(http.StatusOK, event)
|
||||
}
|
||||
|
||||
func clearEvents(_ httprouter.Params, _ []byte) (interface{}, error) {
|
||||
return fic.ClearEvents()
|
||||
func clearEvents(c *gin.Context) {
|
||||
nb, err := fic.ClearEvents()
|
||||
if err != nil {
|
||||
log.Printf("Unable to clearEvent: %s", err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during event clearing."})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, nb)
|
||||
}
|
||||
|
||||
func updateEvent(event *fic.Event, body []byte) (interface{}, error) {
|
||||
func showEvent(c *gin.Context) {
|
||||
event := c.MustGet("event").(*fic.Event)
|
||||
c.JSON(http.StatusOK, event)
|
||||
}
|
||||
|
||||
func updateEvent(c *gin.Context) {
|
||||
event := c.MustGet("event").(*fic.Event)
|
||||
|
||||
var ue fic.Event
|
||||
if err := json.Unmarshal(body, &ue); err != nil {
|
||||
return nil, err
|
||||
err := c.ShouldBindJSON(&ue)
|
||||
if err != nil {
|
||||
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
ue.Id = event.Id
|
||||
|
||||
if _, err := ue.Update(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
genEventsFile()
|
||||
return ue, nil
|
||||
log.Printf("Unable to updateEvent: %s", err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during event update."})
|
||||
return
|
||||
}
|
||||
|
||||
genEventsFile()
|
||||
|
||||
c.JSON(http.StatusOK, ue)
|
||||
}
|
||||
|
||||
func deleteEvent(event *fic.Event, _ []byte) (interface{}, error) {
|
||||
if i, err := event.Delete(); err != nil {
|
||||
return i, err
|
||||
} else {
|
||||
genEventsFile()
|
||||
return i, err
|
||||
func deleteEvent(c *gin.Context) {
|
||||
event := c.MustGet("event").(*fic.Event)
|
||||
|
||||
_, err := event.Delete()
|
||||
if err != nil {
|
||||
log.Printf("Unable to deleteEvent: %s", err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during event deletion."})
|
||||
return
|
||||
}
|
||||
|
||||
genEventsFile()
|
||||
|
||||
c.JSON(http.StatusOK, true)
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue