diff --git a/admin/api/events.go b/admin/api/events.go index 22972ec0..a9fd5977 100644 --- a/admin/api/events.go +++ b/admin/api/events.go @@ -1,6 +1,8 @@ package api import ( + "encoding/json" + "srs.epita.fr/fic-server/libfic" "github.com/julienschmidt/httprouter" @@ -8,6 +10,13 @@ import ( 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 getEvents(_ httprouter.Params, _ []byte) (interface{}, error) { @@ -17,3 +26,51 @@ func getEvents(_ httprouter.Params, _ []byte) (interface{}, error) { 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 { + 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 { + return ue, nil + } +} + +func deleteEvent(event fic.Event, _ []byte) (interface{}, error) { + return event.Delete() +} diff --git a/admin/static/js/app.js b/admin/static/js/app.js index c59a8a53..670fd174 100644 --- a/admin/static/js/app.js +++ b/admin/static/js/app.js @@ -33,6 +33,14 @@ angular.module("FICApp", ["ngRoute", "ngResource", "ngSanitize"]) controller: "TeamNewController", templateUrl: "views/team-new.html" }) + .when("/events", { + controller: "EventsListController", + templateUrl: "views/event-list.html" + }) + .when("/events/:eventId", { + controller: "EventController", + templateUrl: "views/event.html" + }) .when("/", { templateUrl: "views/home.html" }); @@ -43,6 +51,11 @@ angular.module("FICApp") .factory("Version", function($resource) { return $resource("/api/version") }) + .factory("Event", function($resource) { + return $resource("/api/events/:eventId", { eventId: '@id' }, { + 'update': {method: 'PUT'}, + }) + }) .factory("Team", function($resource) { return $resource("/api/teams/:teamId", { teamId: '@id' }, { 'update': {method: 'PUT'}, @@ -166,6 +179,42 @@ angular.module("FICApp") $scope.v = Version.get(); }) + .controller("EventsListController", function($scope, Event, $location) { + $scope.events = Event.query(); + $scope.fields = ["id", "kind", "txt", "time"]; + + $scope.clearEvents = function(id) { + Event.delete(function() { + $scope.events = []; + }); + }; + $scope.show = function(id) { + $location.url("/events/" + id); + }; + }) + .controller("EventController", function($scope, Event, $routeParams, $location) { + $scope.event = Event.get({ eventId: $routeParams.eventId }); + $scope.fields = ["kind", "txt", "time"]; + $scope.kinds = { + "alert-info": "Info", + "alert-warning": "Warning", + "alert-success": "Success" + }; + + $scope.saveEvent = function() { + if (this.event.id) { + this.event.$update(); + } else { + this.event.$save(function() { + $location.url("/events/" + $scope.event.id); + }); + } + } + $scope.deleteEvent = function() { + this.event.$remove(function() { $location.url("/events/");}); + } + }) + .controller("ThemesListController", function($scope, Theme, $location) { $scope.themes = Theme.query(); $scope.fields = ["id", "name"]; diff --git a/admin/static/views/event-list.html b/admin/static/views/event-list.html new file mode 100644 index 00000000..c5c20d5f --- /dev/null +++ b/admin/static/views/event-list.html @@ -0,0 +1,19 @@ +
| + {{ field }} + | +
|---|
| + {{ event[field] }} + | +