qa: New route to export data

This commit is contained in:
nemunaire 2023-06-07 00:11:28 +02:00
parent 31bccddc49
commit d85417b925
3 changed files with 77 additions and 0 deletions

View File

@ -17,6 +17,8 @@ func declareQARoutes(router *gin.RouterGroup) {
exercicesRoutes.GET("", getExerciceQA)
exercicesRoutes.POST("", createExerciceQA)
exercicesRoutes.GET("/export", exportQA)
qaRoutes := exercicesRoutes.Group("/:qid")
qaRoutes.Use(qaHandler)
qaRoutes.PUT("", updateExerciceQA)
@ -83,6 +85,64 @@ func getExerciceQA(c *gin.Context) {
c.JSON(http.StatusOK, qa)
}
func exportQA(c *gin.Context) {
var report string
themes, err := fic.GetThemes()
if err != nil {
log.Println("Unable to GetThemes: ", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to list themes: %s", err.Error())})
return
}
for _, th := range themes {
report += fmt.Sprintf("# %s {#%s}\n\n", th.Name, th.URLId)
exercices, err := th.GetExercices()
if err != nil {
log.Println("Unable to GetExercices: ", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to list exercices for theme #%d: %s", th.Id, err.Error())})
return
}
for _, exercice := range exercices {
report += fmt.Sprintf("## %s {#%s}\n\n", exercice.Title, exercice.URLId)
qa, err := exercice.GetQAQueries()
if err != nil {
log.Println("Unable to GetQAQueries: ", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to list QA entries: %s", err.Error())})
return
}
for _, q := range qa {
emoji := "❓"
if q.Closed != nil {
emoji = "👌"
} else if q.Solved != nil {
emoji = "✅"
}
report += fmt.Sprintf("### %s [%s] %s\n\nOuvert par %s le %s\n\n", emoji, q.State, q.Subject, q.User, q.Creation)
comments, err := q.GetComments()
if err != nil {
log.Println("Unable to GetQAComments: ", err.Error())
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to list QA comments: %s", err.Error())})
return
}
for _, c := range comments {
report += fmt.Sprintf("Le %s, %s :\n%s\n\n", c.Date, c.User, c.Content)
}
}
}
}
c.JSON(http.StatusOK, report)
}
type QAQueryAndComment struct {
*fic.QAQuery
Content string `json:"content"`

View File

@ -120,6 +120,7 @@ func declareStaticRoutes(router *gin.RouterGroup, baseURL string) {
router.GET("/", serveOrReverse("", baseURL))
router.GET("/exercices", serveOrReverse("/", baseURL))
router.GET("/exercices/*_", serveOrReverse("/", baseURL))
router.GET("/export", serveOrReverse("/", baseURL))
router.GET("/themes", serveOrReverse("/", baseURL))
router.GET("/themes/*_", serveOrReverse("/", baseURL))
router.GET("/_app/*_", serveOrReverse("", baseURL))

View File

@ -0,0 +1,16 @@
<script>
import {
Container,
Spinner,
} from 'sveltestrap';
</script>
<Container class="mt-2 mb-5">
{#await fetch('api/qa/export')}
<Spinner />
{:then res}
{#await res.json() then md}
<pre>{md}</pre>
{/await}
{/await}
</Container>