From d7f679ce8443de51f5f639283d2ff12cb3843374 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 18 Nov 2022 16:11:24 +0100 Subject: [PATCH] Display survey mean to admin --- surveys.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/surveys.go b/surveys.go index 48df3eb..ad44b0a 100644 --- a/surveys.go +++ b/surveys.go @@ -77,11 +77,12 @@ func declareAPIAuthSurveysRoutes(router *gin.RouterGroup) { surveysRoutes.Use(surveyHandler) surveysRoutes.GET("/score", func(c *gin.Context) { + loggedUser := c.MustGet("LoggedUser").(*User) var u *User if user, ok := c.Get("user"); ok { u = user.(*User) } else { - u = c.MustGet("LoggedUser").(*User) + u = loggedUser } s := c.MustGet("survey").(*Survey) @@ -93,10 +94,29 @@ func declareAPIAuthSurveysRoutes(router *gin.RouterGroup) { return } - if score == nil { - c.JSON(http.StatusOK, map[string]string{"score": "N/A"}) - } else { + if score != nil { c.JSON(http.StatusOK, map[string]float64{"score": *score}) + } else if _, ok := c.Get("user"); !ok && loggedUser.IsAdmin { + // Admin retrieve mean score + scores, err := s.GetGrades() + if err != nil { + log.Printf("Unable to GetGrades(sid=%d): %s", s.Id, err.Error()) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs when trying to retrieve grades."}) + return + } + + *score = 0 + nbGrades := 0 + for _, s := range scores { + *score += *s + nbGrades += 1 + } + + *score /= float64(nbGrades) + + c.JSON(http.StatusOK, map[string]float64{"score": *score}) + } else { + c.JSON(http.StatusOK, map[string]string{"score": "N/A"}) } } else { c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Not accessible"})