package api import ( "net/http" "srs.epita.fr/fic-server/libfic" "github.com/gin-gonic/gin" ) func declareTodoRoutes(router *gin.RouterGroup) { router.GET("/qa_exercices.json", getExerciceTested) router.GET("/qa_mywork.json", getQAWork) router.GET("/qa_myexercices.json", getQAView) router.POST("/qa_my_exercices.json", addQAView) router.GET("/qa_work.json", getQATodo) router.POST("/qa_work.json", createQATodo) } type exerciceTested map[int64]string func getExerciceTested(c *gin.Context) { teamid := c.MustGet("LoggedTeam").(int64) team, err := fic.GetTeam(teamid) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } exercices, err := fic.GetExercices() if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } ret := exerciceTested{} for _, exercice := range exercices { if team.HasAccess(exercice) { if t := team.HasSolved(exercice); t != nil { ret[exercice.Id] = "solved" } else if cnt, _ := team.CountTries(exercice); cnt > 0 { ret[exercice.Id] = "tried" } else { ret[exercice.Id] = "access" } } } c.JSON(http.StatusOK, ret) } func getQAView(c *gin.Context) { teamid := c.MustGet("LoggedTeam").(int64) team, err := fic.GetTeam(teamid) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } view, err := team.GetQAView() if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } c.JSON(http.StatusOK, view) } func getQAWork(c *gin.Context) { teamid := c.MustGet("LoggedTeam").(int64) team, err := fic.GetTeam(teamid) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } queries, err := team.GetQAQueries() if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } c.JSON(http.StatusOK, queries) } func getQATodo(c *gin.Context) { teamid := c.MustGet("LoggedTeam").(int64) team, err := fic.GetTeam(teamid) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } todo, err := team.GetQATodo() if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } exercices, err := fic.GetExercices() if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } for _, exercice := range exercices { if cnt, _ := team.CountTries(exercice); cnt > 0 { todo = append(todo, &fic.QATodo{0, teamid, exercice.Id}) } } c.JSON(http.StatusOK, todo) } func createQATodo(c *gin.Context) { ficteam := c.MustGet("LoggedUser").(string) if ficteam != "nemunaire" { c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Restricted"}) return } var ut fic.QATodo if err := c.ShouldBindJSON(&ut); err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } team, err := fic.GetTeam(ut.IdTeam) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } todo, err := team.NewQATodo(ut.IdExercice) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } c.JSON(http.StatusOK, todo) } func addQAView(c *gin.Context) { ficteam := c.MustGet("LoggedUser").(string) if ficteam != "nemunaire" { c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Restricted"}) return } var ut fic.QATodo if err := c.ShouldBindJSON(&ut); err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } team, err := fic.GetTeam(ut.IdTeam) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } view, err := team.NewQAView(ut.IdExercice) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return } c.JSON(http.StatusOK, view) }