libfic: implement more dependancies kind

This commit is contained in:
nemunaire 2019-01-16 06:02:06 +01:00
commit 5d31ac6e04
5 changed files with 93 additions and 8 deletions

View file

@ -121,7 +121,11 @@ func (m MCQ) Update() (int64, error) {
// Delete the MCQ from the database.
func (m MCQ) Delete() (int64, error) {
if res, err := DBExec("DELETE FROM exercice_mcq WHERE id_mcq = ?", m.Id); err != nil {
if _, err := DBExec("DELETE FROM exercice_mcq_okey_deps WHERE id_mcq = ?", m.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM exercice_flags_omcq_deps WHERE id_mcq_dep = ?", m.Id); err != nil {
return 0, err
} else if res, err := DBExec("DELETE FROM exercice_mcq WHERE id_mcq = ?", m.Id); err != nil {
return 0, err
} else if nb, err := res.RowsAffected(); err != nil {
return 0, err
@ -167,6 +171,10 @@ func (n MCQ_entry) Delete() (int64, error) {
func (e Exercice) WipeMCQs() (int64, error) {
if _, err := DBExec("DELETE FROM mcq_entries 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 exercice_flags_omcq_deps WHERE id_mcq_dep IN (SELECT id_mcq FROM exercice_mcq WHERE id_exercice = ?);", e.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM exercice_mcq_okey_deps WHERE id_mcq IN (SELECT id_mcq FROM exercice_mcq WHERE id_exercice = ?);", e.Id); err != nil {
return 0, err
} else if res, err := DBExec("DELETE FROM exercice_mcq WHERE id_exercice = ?;", e.Id); err != nil {
return 0, err
} else if nb, err := res.RowsAffected(); err != nil {
@ -178,12 +186,35 @@ func (e Exercice) WipeMCQs() (int64, error) {
// AddDepend insert a new dependency to a given flag.
func (m MCQ) AddDepend(j Flag) (err error) {
return errors.New("Dependancy type not implemented for this flag.")
if d, ok := j.(FlagKey); ok {
_, err = DBExec("INSERT INTO exercice_mcq_okey_deps (id_mcq, id_flag_dep) VALUES (?, ?)", m.Id, d.Id)
} else {
err = errors.New("Dependancy type not implemented for this flag.")
}
return
}
// GetDepends retrieve the flag's dependency list.
func (m MCQ) GetDepends() ([]Flag, error) {
return nil, errors.New("Dependancy not implemented for MCQs.")
if rows, err := DBQuery("SELECT id_flag_dep FROM exercice_mcq_okey_deps WHERE id_mcq = ?", m.Id); err != nil {
return nil, err
} else {
defer rows.Close()
var deps = make([]Flag, 0)
for rows.Next() {
var d int64
if err := rows.Scan(&d); err != nil {
return nil, err
}
deps = append(deps, MCQ{d, m.IdExercice, "", []MCQ_entry{}})
}
if err := rows.Err(); err != nil {
return nil, err
}
return deps, nil
}
}
// GetJustifiedFlag searchs for a flag in the scope of the given exercice.