sync: return binding between challenge.txt IDs and DB item

This commit is contained in:
nemunaire 2019-11-25 14:57:21 +01:00
parent 4a490b1a33
commit d97ecde3fb
5 changed files with 20 additions and 10 deletions

View file

@ -65,11 +65,13 @@ func init() {
})))
router.POST("/api/sync/exercices/:eid/hints", apiHandler(exerciceHandler(
func(exercice fic.Exercice, _ []byte) (interface{}, error) {
return sync.SyncExerciceHints(sync.GlobalImporter, exercice), nil
_, errs := sync.SyncExerciceHints(sync.GlobalImporter, exercice)
return errs, nil
})))
router.POST("/api/sync/exercices/:eid/flags", apiHandler(exerciceHandler(
func(exercice fic.Exercice, _ []byte) (interface{}, error) {
return sync.SyncExerciceFlags(sync.GlobalImporter, exercice), nil
_, errs := sync.SyncExerciceFlags(sync.GlobalImporter, exercice)
return errs, nil
})))
router.POST("/api/sync/exercices/:eid/fixurlid", apiHandler(exerciceHandler(

View file

@ -70,11 +70,13 @@ func init() {
})))
router.POST("/api/sync/themes/:thid/exercices/:eid/hints", apiHandler(exerciceHandler(
func(exercice fic.Exercice, _ []byte) (interface{}, error) {
return sync.SyncExerciceHints(sync.GlobalImporter, exercice), nil
_, errs := sync.SyncExerciceHints(sync.GlobalImporter, exercice)
return errs, nil
})))
router.POST("/api/sync/themes/:thid/exercices/:eid/keys", apiHandler(exerciceHandler(
func(exercice fic.Exercice, _ []byte) (interface{}, error) {
return sync.SyncExerciceFlags(sync.GlobalImporter, exercice), nil
_, errs := sync.SyncExerciceFlags(sync.GlobalImporter, exercice)
return errs, nil
})))
router.POST("/api/sync/themes/:thid/fixurlid", apiHandler(themeHandler(

View file

@ -92,7 +92,7 @@ func CheckExerciceHints(i Importer, exercice fic.Exercice) ([]fic.EHint, []strin
}
// SyncExerciceHints reads the content of hints/ directories and import it as EHint for the given challenge.
func SyncExerciceHints(i Importer, exercice fic.Exercice) (errs []string) {
func SyncExerciceHints(i Importer, exercice fic.Exercice) (hintsBindings map[int]fic.EHint, errs []string) {
if _, err := exercice.WipeHints(); err != nil {
errs = append(errs, err.Error())
} else {
@ -101,8 +101,10 @@ func SyncExerciceHints(i Importer, exercice fic.Exercice) (errs []string) {
for n, hint := range hints {
// Import hint
if _, err := exercice.AddHint(hint.Title, hint.Content, hint.Cost); err != nil {
if h, err := exercice.AddHint(hint.Title, hint.Content, hint.Cost); err != nil {
errs = append(errs, fmt.Sprintf("%q: hint #%d %s: %s", path.Base(exercice.Path), n+1, hint.Title, err))
} else {
hintsBindings[n+1] = h
}
}
}

View file

@ -347,7 +347,7 @@ func CheckExerciceFlags(i Importer, exercice fic.Exercice, files []fic.EFile) (r
}
// SyncExerciceFlags imports all kind of flags for the given challenge.
func SyncExerciceFlags(i Importer, exercice fic.Exercice) (errs []string) {
func SyncExerciceFlags(i Importer, exercice fic.Exercice) (kmap map[int64]fic.Flag, errs []string) {
if _, err := exercice.WipeFlags(); err != nil {
errs = append(errs, err.Error())
} else if _, err := exercice.WipeMCQs(); err != nil {
@ -356,7 +356,7 @@ func SyncExerciceFlags(i Importer, exercice fic.Exercice) (errs []string) {
flags, flagids, berrs := buildExerciceFlags(i, exercice)
errs = append(errs, berrs...)
kmap := map[int64]fic.Flag{}
kmap = map[int64]fic.Flag{}
// Import flags
for _, flagid := range flagids {

View file

@ -45,10 +45,14 @@ func SyncDeep(i Importer) (errs map[string][]string) {
for eid, exercice := range exercices {
DeepSyncProgress = 3 + uint8(tid) * themeStep + uint8(eid) * exerciceStep
errs[theme.Name] = append(errs[theme.Name], SyncExerciceFiles(i, exercice)...)
DeepSyncProgress += exerciceStep / 3
errs[theme.Name] = append(errs[theme.Name], SyncExerciceFlags(i, exercice)...)
_, ferrs := SyncExerciceFlags(i, exercice)
errs[theme.Name] = append(errs[theme.Name], ferrs...)
DeepSyncProgress += exerciceStep / 3
errs[theme.Name] = append(errs[theme.Name], SyncExerciceHints(i, exercice)...)
_, herrs := SyncExerciceHints(i, exercice)
errs[theme.Name] = append(errs[theme.Name], herrs...)
}
}
}