2020-09-08 10:50:41 +00:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
"srs.epita.fr/fic-server/libfic"
|
|
|
|
|
|
|
|
"github.com/julienschmidt/httprouter"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
router.GET("/api/themes", apiHandler(listThemes))
|
|
|
|
router.GET("/api/themes.json", apiHandler(exportThemes))
|
|
|
|
|
|
|
|
router.GET("/api/themes/:thid", apiHandler(themeHandler(showTheme)))
|
|
|
|
|
|
|
|
router.GET("/api/themes/:thid/exercices", apiHandler(themeHandler(listThemedExercices)))
|
|
|
|
|
|
|
|
router.GET("/api/themes/:thid/exercices/:eid", apiHandler(exerciceHandler(showExercice)))
|
|
|
|
}
|
|
|
|
|
2021-11-22 14:35:07 +00:00
|
|
|
func themeHandler(f func(QAUser, *fic.Theme, []byte) (interface{}, error)) func(QAUser, httprouter.Params, []byte) (interface{}, error) {
|
2020-09-08 10:50:41 +00:00
|
|
|
return func(u QAUser, ps httprouter.Params, body []byte) (interface{}, error) {
|
|
|
|
if thid, err := strconv.ParseInt(string(ps.ByName("thid")), 10, 64); err != nil {
|
|
|
|
return nil, err
|
|
|
|
} else if theme, err := fic.GetTheme(thid); err != nil {
|
|
|
|
return nil, err
|
|
|
|
} else {
|
|
|
|
return f(u, theme, body)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-22 14:35:07 +00:00
|
|
|
func getExercice(args []string) (*fic.Exercice, error) {
|
2020-09-08 10:50:41 +00:00
|
|
|
if tid, err := strconv.ParseInt(string(args[0]), 10, 64); err != nil {
|
2021-11-22 14:35:07 +00:00
|
|
|
return nil, err
|
2020-09-08 10:50:41 +00:00
|
|
|
} else if theme, err := fic.GetTheme(tid); err != nil {
|
2021-11-22 14:35:07 +00:00
|
|
|
return nil, err
|
2020-09-08 10:50:41 +00:00
|
|
|
} else if eid, err := strconv.Atoi(string(args[1])); err != nil {
|
2021-11-22 14:35:07 +00:00
|
|
|
return nil, err
|
2020-09-08 10:50:41 +00:00
|
|
|
} else {
|
|
|
|
return theme.GetExercice(eid)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func listThemes(_ QAUser, _ httprouter.Params, _ []byte) (interface{}, error) {
|
|
|
|
return fic.GetThemes()
|
|
|
|
}
|
|
|
|
|
|
|
|
func exportThemes(_ QAUser, _ httprouter.Params, _ []byte) (interface{}, error) {
|
|
|
|
return fic.ExportThemes()
|
|
|
|
}
|
|
|
|
|
2021-11-22 14:35:07 +00:00
|
|
|
func showTheme(_ QAUser, theme *fic.Theme, _ []byte) (interface{}, error) {
|
2020-09-08 10:50:41 +00:00
|
|
|
return theme, nil
|
|
|
|
}
|
|
|
|
|
2021-11-22 14:35:07 +00:00
|
|
|
func listThemedExercices(_ QAUser, theme *fic.Theme, _ []byte) (interface{}, error) {
|
2020-09-08 10:50:41 +00:00
|
|
|
return theme.GetExercices()
|
|
|
|
}
|
|
|
|
|
2021-11-22 14:35:07 +00:00
|
|
|
func showThemedExercice(_ QAUser, theme *fic.Theme, exercice *fic.Exercice, body []byte) (interface{}, error) {
|
2020-09-08 10:50:41 +00:00
|
|
|
return exercice, nil
|
|
|
|
}
|