server/libfic/flag.go
Pierre-Olivier Mercier a66d6885e7 Refactor flags
Both QCM and Key are Flag
2019-01-21 09:58:35 +01:00

55 lines
1.6 KiB
Go

package fic
import ()
type Flag interface {
Update() (int64, error)
Delete() (int64, error)
AddDepend(d Flag) (error)
GetDepends() ([]Flag, error)
Check(val interface{}) int
FoundBy(t Team)
}
// GetFlag returns a list of flags comming with the challenge.
func (e Exercice) GetFlags() ([]Flag, error) {
var flags = make([]Flag, 0)
if ks, err := e.GetFlagKeys(); err != nil {
return nil, err
} else {
for _, k := range ks {
flags = append(flags, k)
}
}
if ms, err := e.GetMCQ(); err != nil {
return nil, err
} else {
for _, m := range ms {
flags = append(flags, m)
}
}
return flags, nil
}
// WipeFlags deletes flags coming with the challenge.
func (e Exercice) WipeFlags() (int64, error) {
if _, err := DBExec("DELETE FROM exercice_files_deps WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM exercice_flags_deps WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM team_wchoices WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM flag_choices WHERE id_flag IN (SELECT id_flag FROM exercice_flags WHERE id_exercice = ?)", e.Id); err != nil {
return 0, err
} else if res, err := DBExec("DELETE FROM exercice_flags WHERE id_exercice = ?", e.Id); err != nil {
return 0, err
} else if nb, err := res.RowsAffected(); err != nil {
return 0, err
} else {
return nb, err
}
}