server/admin/api/events.go

98 lines
2.1 KiB
Go

package api
import (
"encoding/json"
"io/ioutil"
"path"
"srs.epita.fr/fic-server/libfic"
"github.com/julienschmidt/httprouter"
)
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))
router.GET("/api/events/:evid", apiHandler(eventHandler(showEvent)))
router.PUT("/api/events/:evid", apiHandler(eventHandler(updateEvent)))
router.DELETE("/api/events/:evid", apiHandler(eventHandler(deleteEvent)))
}
func genEventsFile() error {
if evts, err := fic.GetLastEvents(); err != nil {
return err
} else if j, err := json.Marshal(evts); err != nil {
return err
} else if err := ioutil.WriteFile(path.Join(TeamsDir, "events.json"), j, 0666); err != nil {
return err
}
return nil
}
func getEvents(_ httprouter.Params, _ []byte) (interface{}, error) {
if evts, err := fic.GetEvents(); err != nil {
return nil, err
} else {
return evts, nil
}
}
func getLastEvents(_ httprouter.Params, _ []byte) (interface{}, error) {
if evts, err := fic.GetLastEvents(); err != nil {
return nil, err
} else {
return evts, nil
}
}
func showEvent(event *fic.Event, _ []byte) (interface{}, error) {
return event, nil
}
func newEvent(_ httprouter.Params, body []byte) (interface{}, error) {
var ue fic.Event
if err := json.Unmarshal(body, &ue); err != nil {
return nil, err
}
if event, err := fic.NewEvent(ue.Text, ue.Kind); err != nil {
return nil, err
} else {
genEventsFile()
return event, nil
}
}
func clearEvents(_ httprouter.Params, _ []byte) (interface{}, error) {
return fic.ClearEvents()
}
func updateEvent(event *fic.Event, body []byte) (interface{}, error) {
var ue fic.Event
if err := json.Unmarshal(body, &ue); err != nil {
return nil, err
}
ue.Id = event.Id
if _, err := ue.Update(); err != nil {
return nil, err
} else {
genEventsFile()
return ue, nil
}
}
func deleteEvent(event *fic.Event, _ []byte) (interface{}, error) {
if i, err := event.Delete(); err != nil {
return i, err
} else {
genEventsFile()
return i, err
}
}