fic: Add theme recursive deletion
This commit is contained in:
parent
995740e275
commit
1a1343596a
|
@ -268,8 +268,8 @@ func (e Exercice) DeleteCascade() (int64, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// DeleteDeep the challenge from the database, including player content.
|
||||
func (e Exercice) DeleteDeep() (int64, error) {
|
||||
// DeleteCascadePlayer delete player content related to this challenge.
|
||||
func (e Exercice) DeleteCascadePlayer() (int64, error) {
|
||||
if _, err := DBExec("DELETE FROM mcq_found WHERE id_mcq IN (SELECT id_mcq FROM exercice_mcq WHERE id_exercice = ?)", e.Id); err != nil {
|
||||
return 0, err
|
||||
} else if _, err := DBExec("DELETE FROM flag_found WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
|
||||
|
@ -282,6 +282,15 @@ func (e Exercice) DeleteDeep() (int64, error) {
|
|||
return 0, err
|
||||
} else if _, err := DBExec("DELETE FROM exercice_tries WHERE id_exercice = ?", e.Id); err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
return 1, nil
|
||||
}
|
||||
}
|
||||
|
||||
// DeleteDeep the challenge from the database, including player content.
|
||||
func (e Exercice) DeleteDeep() (int64, error) {
|
||||
if _, err := e.DeleteCascadePlayer(); err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
return e.DeleteCascade()
|
||||
}
|
||||
|
|
|
@ -117,3 +117,55 @@ func (t Theme) Delete() (int64, error) {
|
|||
return nb, err
|
||||
}
|
||||
}
|
||||
|
||||
func (t Theme) deleteFunc(f func(Exercice) (int64, error)) (int64, error) {
|
||||
exercices, err := t.GetExercices()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
for _, exercice := range exercices {
|
||||
_, err := f(exercice)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
return 1, nil
|
||||
}
|
||||
|
||||
// DeleteCascade the theme from the database, including inner content but not player content.
|
||||
func (t Theme) DeleteCascade() (int64, error) {
|
||||
_, err := t.deleteFunc(func(e Exercice) (int64, error) {
|
||||
return e.DeleteCascade()
|
||||
})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return t.Delete()
|
||||
}
|
||||
|
||||
// DeleteCascadePlayer delete player content related to this theme.
|
||||
func (t Theme) DeleteCascadePlayer() (int64, error) {
|
||||
_, err := t.deleteFunc(func(e Exercice) (int64, error) {
|
||||
return e.DeleteCascadePlayer()
|
||||
})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return 1, nil
|
||||
}
|
||||
|
||||
// DeleteDeep the theme from the database, including player content.
|
||||
func (t Theme) DeleteDeep() (int64, error) {
|
||||
_, err := t.deleteFunc(func(e Exercice) (int64, error) {
|
||||
return e.DeleteDeep()
|
||||
})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return t.Delete()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue