[admin] Add events
This commit is contained in:
parent
863070c037
commit
b6782962f1
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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"];
|
||||
|
|
19
admin/static/views/event-list.html
Normal file
19
admin/static/views/event-list.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
<h2>Événements<a ng-click="clearEvents()" class="pull-right btn btn-danger"><span class="glyphicon glyphicon-remove-sign" aria-hidden="true"></span> Vider la liste</a><a ng-click="show('new')" class="pull-right btn btn-primary" style="margin-right: 10px"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Ajouter un événement</a></h2>
|
||||
|
||||
<p><input type="search" class="form-control" placeholder="Search" ng-model="query"></p>
|
||||
<table class="table table-hover table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th ng-repeat="field in fields">
|
||||
{{ field }}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="event in events | filter: query" ng-click="show(event.id)">
|
||||
<td ng-repeat="field in fields">
|
||||
{{ event[field] }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
20
admin/static/views/event.html
Normal file
20
admin/static/views/event.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
<h2>Événement</h2>
|
||||
|
||||
<form ng-submit="saveEvent()" class="form-horizontal">
|
||||
<div class="form-group" ng-repeat="field in fields">
|
||||
<label for="{{ field }}" class="col-sm-1 control-label">{{ field | capitalize }}</label>
|
||||
<div class="col-sm-11">
|
||||
<input type="text" class="form-control" id="{{ field }}" ng-model="event[field]" ng-show="field != 'kind' && field != 'time'">
|
||||
<input type="datetime" class="form-control" id="{{ field }}" ng-model="event[field]" ng-show="field == 'time' && event.id">
|
||||
<select class="form-control" id="{{ field }}" ng-model="event[field]" ng-options="k as v for (k, v) in kinds" ng-show="field == 'kind'">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-right" ng-show="event.id">
|
||||
<button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-save" aria-hidden="true"></span> Save</button>
|
||||
<a class="btn btn-danger" ng-click="deleteEvent()"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a>
|
||||
</div>
|
||||
<div class="text-right" ng-show="!event.id">
|
||||
<button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Ajouter l'événement</button>
|
||||
</div>
|
||||
</form>
|
|
@ -11,7 +11,7 @@ type Event struct {
|
|||
Time time.Time `json:"time"`
|
||||
}
|
||||
|
||||
func GetEvents() ([]Event, error) {
|
||||
func GetLastEvents() ([]Event, error) {
|
||||
if rows, err := DBQuery("SELECT id_event, txt, kind, time FROM events ORDER BY time DESC LIMIT 6"); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
|
@ -33,6 +33,37 @@ func GetEvents() ([]Event, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func GetEvents() ([]Event, error) {
|
||||
if rows, err := DBQuery("SELECT id_event, txt, kind, time FROM events ORDER BY time DESC"); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
defer rows.Close()
|
||||
|
||||
var events = make([]Event, 0)
|
||||
for rows.Next() {
|
||||
var e Event
|
||||
if err := rows.Scan(&e.Id, &e.Text, &e.Kind, &e.Time); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
events = append(events, e)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return events, nil
|
||||
}
|
||||
}
|
||||
|
||||
func GetEvent(id int) (Event, error) {
|
||||
var e Event
|
||||
if err := DBQueryRow("SELECT id_event, txt, kind, time FROM events WHERE id_event=?", id).Scan(&e.Id, &e.Text, &e.Kind, &e.Time); err != nil {
|
||||
return e, err
|
||||
}
|
||||
|
||||
return e, nil
|
||||
}
|
||||
|
||||
func NewEvent(txt string, kind string) (Event, error) {
|
||||
if res, err := DBExec("INSERT INTO events (txt, kind, time) VALUES (?, ?, ?)", txt, kind, time.Now()); err != nil {
|
||||
return Event{}, err
|
||||
|
@ -62,3 +93,13 @@ func (e Event) Delete() (int64, error) {
|
|||
return nb, err
|
||||
}
|
||||
}
|
||||
|
||||
func ClearEvents() (int64, error) {
|
||||
if res, err := DBExec("DELETE FROM events"); err != nil {
|
||||
return 0, err
|
||||
} else if nb, err := res.RowsAffected(); err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
return nb, err
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user