qa: Add todo list on home page
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
nemunaire 2020-09-08 13:30:28 +02:00
commit 42d594ccac
5 changed files with 159 additions and 1 deletions

49
qa/api/todo.go Normal file
View file

@ -0,0 +1,49 @@
package api
import (
"encoding/json"
"errors"
"srs.epita.fr/fic-server/libfic"
"github.com/julienschmidt/httprouter"
)
func init() {
router.GET("/api/qa_mywork.json", apiHandler(getQAWork))
router.GET("/api/qa_work.json", apiHandler(getQATodo))
router.POST("/api/qa_work.json", apiHandler(createQATodo))
}
func getQAWork(u QAUser, ps httprouter.Params, body []byte) (interface{}, error) {
if team, err := fic.GetTeam(u.TeamId); err != nil {
return nil, err
} else {
return team.GetQAQueries()
}
}
func getQATodo(u QAUser, ps httprouter.Params, body []byte) (interface{}, error) {
if team, err := fic.GetTeam(u.TeamId); err != nil {
return nil, err
} else {
return team.GetQATodo()
}
}
func createQATodo(u QAUser, ps httprouter.Params, body []byte) (interface{}, error) {
if u.User != "nemunaire" {
return nil, errors.New("Restricted")
}
var ut fic.QATodo
if err := json.Unmarshal(body, &ut); err != nil {
return nil, err
}
if team, err := fic.GetTeam(ut.IdTeam); err != nil {
return nil, err
} else {
return team.NewQATodo(ut.IdExercice)
}
}

View file

@ -90,6 +90,12 @@ angular.module("FICApp")
.factory("Version", function($resource) {
return $resource("/api/version")
})
.factory("Todo", function($resource) {
return $resource("/api/qa_work.json")
})
.factory("TodoWorked", function($resource) {
return $resource("/api/qa_mywork.json")
})
.factory("Team", function($resource) {
return $resource("/api/teams/:teamId", { teamId: '@id' }, {
'update': {method: 'PUT'},
@ -216,6 +222,20 @@ angular.module("FICApp")
$scope.v = Version.get();
})
.controller("ToDoController", function($scope, Todo, TodoWorked, $location) {
$scope.todos = Todo.query();
$scope.tododone = {}
$scope.work = TodoWorked.query(function(tw) {
tw.forEach(function(t) {
$scope.tododone[t.id_exercice] = t
})
});
$scope.show = function(id) {
$location.url("/exercices/" + id);
};
})
.controller("ThemesListController", function($scope, Theme, $location, $rootScope, $http) {
$scope.themes = Theme.query();
$scope.fields = ["name", "authors", "headline"];
@ -286,6 +306,13 @@ angular.module("FICApp")
};
})
.controller("MyTodoExerciceController", function($scope, Exercice, ExerciceQA, Theme) {
$scope.mytheme = null
$scope.myexercice = Exercice.get({ exerciceId: $scope.todo.id_exercice }, function(e) {
$scope.mytheme = Theme.get({ themeId: e.id_theme })
});
})
.controller("ExerciceController", function($scope, $rootScope, Exercice, ThemedExercice, $routeParams, $location, $http) {
if ($routeParams.themeId && $routeParams.exerciceId == "new") {
$scope.exercice = new ThemedExercice();

View file

@ -1,7 +1,23 @@
<div class="jumbotron text-light bg-dark">
<h1 class="display-5">Interface QA du challenge</h1>
<div class="row">
<div class="col">
<div class="col" ng-controller="ToDoController">
<table class="table table-stripped">
<tr ng-repeat="todo in todos" ng-controller="MyTodoExerciceController" ng-class="{'bg-warning': !tododone[todo.id_exercice], 'bg-success': tododone[todo.id_exercice]}" ng-click="show(todo.id_exercice)">
<td ng-if="!tododone[todo.id_exercice]">
À tester
</td>
<td ng-if="tododone[todo.id_exercice]">
Testé
</td>
<td>
{{ mytheme.name }}
</td>
<td>
{{ myexercice.title }}
</td>
</tr>
</table>
</div>
</div>
</div>