admin: add exercices stats accordion

This commit is contained in:
nemunaire 2020-01-28 14:01:13 +01:00
parent f4c74f57d6
commit b387f011d8
3 changed files with 41 additions and 0 deletions

View File

@ -22,6 +22,8 @@ func init() {
router.PATCH("/api/exercices/:eid", apiHandler(exerciceHandler(partUpdateExercice)))
router.DELETE("/api/exercices/:eid", apiHandler(exerciceHandler(deleteExercice)))
router.GET("/api/exercices/:eid/stats.json", apiHandler(exerciceHandler(getExerciceStats)))
router.GET("/api/exercices/:eid/history.json", apiHandler(exerciceHandler(getExerciceHistory)))
router.PATCH("/api/exercices/:eid/history.json", apiHandler(exerciceHandler(updateExerciceHistory)))
router.DELETE("/api/exercices/:eid/history.json", apiHandler(exerciceHandler(delExerciceHistory)))
@ -167,6 +169,20 @@ func getExerciceHistory(exercice fic.Exercice, body []byte) (interface{}, error)
return exercice.GetHistory()
}
type exerciceStats struct {
TeamTries int64 `json:"team_tries"`
TotalTries int64 `json:"total_tries"`
SolvedCount int64 `json:"solved_count"`
}
func getExerciceStats(e fic.Exercice, body []byte) (interface{}, error) {
return exerciceStats{
TeamTries: e.TriedTeamCount(),
TotalTries: e.TriedCount(),
SolvedCount: e.SolvedCount(),
}, nil
}
type uploadedExerciceHistory struct {
IdTeam int64 `json:"team_id"`
Kind string

View File

@ -240,6 +240,9 @@ angular.module("FICApp")
.factory("ExerciceHistory", function($resource) {
return $resource("/api/exercices/:exerciceId/history.json", { exerciceId: '@id' })
})
.factory("ExerciceStats", function($resource) {
return $resource("/api/exercices/:exerciceId/stats.json", { exerciceId: '@id' })
})
.factory("ExerciceFile", function($resource) {
return $resource("/api/exercices/:exerciceId/files/:fileId", { exerciceId: '@idExercice', fileId: '@id' }, {
update: {method: 'PUT'}
@ -1456,6 +1459,10 @@ angular.module("FICApp")
}
})
.controller("ExerciceStatsController", function($scope, ExerciceStats, $routeParams) {
$scope.stats = ExerciceStats.get({ exerciceId: $routeParams.exerciceId });
})
.controller("ExerciceClaimsController", function($scope, ExerciceClaims, Team, ClaimAssignee, $routeParams, $location) {
$scope.claims = ExerciceClaims.query({ exerciceId: $routeParams.exerciceId });
$scope.assignees = ClaimAssignee.query();

View File

@ -49,6 +49,24 @@
</table>
</div>
<div class="card border-secondary" ng-controller="ExerciceStatsController">
<div class="card-header bg-primary text-light" type="button" data-toggle="collapse" data-target="#collapseStats" aria-expanded="true" aria-controls="collapseStats">
<h4 class="m-0"><small class="glyphicon glyphicon-chevron-right" aria-hidden="true"></small> Statistiques</h4>
</div>
<div class="collapse show" id="collapseStats" aria-labelledby="headingStats" data-parent="#accordionExercice">
<dl class="row mt-2 ml-2">
<dt class="col-sm-6 text-truncate" title="Nombre de tentatives">Nombre de tentatives</dt>
<dd class="col-sm-6"><ng-pluralize count="stats.total_tries" when="{'0': 'aucune tentative', 'one': '{} tentative', 'other': '{} tentatives'}"></ng-pluralize></dd>
<dt class="col-sm-6 text-truncate" title="Nombre d'équipes">Nombre d'équipes</dt>
<dd class="col-sm-6"><ng-pluralize count="stats.team_tries" when="{'0': 'aucune équipe', 'one': '{} équipe', 'other': '{} équipes'}"></ng-pluralize></dd>
<dt class="col-sm-6 text-truncate" title="Défi validé par">Défi validé par</dt>
<dd class="col-sm-6"><ng-pluralize count="stats.solved_count" when="{'0': 'aucune équipe', 'one': '{} équipe', 'other': '{} équipes'}"></ng-pluralize></dd>
</dl>
</div>
</div>
<div class="card border-secondary" ng-controller="ExerciceFilesController">
<div class="card-header bg-secondary text-light" type="button" data-toggle="collapse" data-target="#collapseFiles" aria-expanded="true" aria-controls="collapseFiles">
<h4 class="m-0"><small class="glyphicon glyphicon-chevron-right" aria-hidden="true"></small> Téléchargements</h4>