98 lines
2.1 KiB
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
|
|
}
|
|
}
|