From d1c5a545d9ae20b9985f38bd03064186186765e3 Mon Sep 17 00:00:00 2001 From: nemunaire Date: Fri, 9 Dec 2016 11:49:29 +0100 Subject: [PATCH] backend: can open hint --- backend/hint.go | 36 ++++++++++++++++++++++++++++++++++++ backend/main.go | 2 ++ libfic/hint.go | 9 +++++++++ libfic/team.go | 5 +++++ 4 files changed, 52 insertions(+) create mode 100644 backend/hint.go diff --git a/backend/hint.go b/backend/hint.go new file mode 100644 index 00000000..17124f5b --- /dev/null +++ b/backend/hint.go @@ -0,0 +1,36 @@ +package main + +import ( + "encoding/json" + "log" + "io/ioutil" + "os" + + "srs.epita.fr/fic-server/libfic" +) + +type askOpenHint struct { + HintId int64 `json:"id"` +} + +func treatOpeningHint(pathname string, team fic.Team) { + var ask askOpenHint + + if cnt_raw, err := ioutil.ReadFile(pathname); err != nil { + log.Println("[ERR]", err) + } else if err := json.Unmarshal(cnt_raw, &ask); err != nil { + log.Println("[ERR]", err) + } else if ask.HintId == 0 { + log.Println("[WRN] Invalid content in hint file: ", pathname) + os.Remove(pathname) + } else if hint, err := fic.GetHint(ask.HintId); err != nil { + log.Println("[ERR]", err) + } else if err := team.OpenHint(hint); err != nil { + log.Println("[ERR]", err) + } else { + genTeamMyFile(team) + if err := os.Remove(pathname); err != nil { + log.Println("[ERR]", err) + } + } +} diff --git a/backend/main.go b/backend/main.go index 44e44ee2..229c9507 100644 --- a/backend/main.go +++ b/backend/main.go @@ -116,6 +116,8 @@ func treat(raw_path string) { log.Println("[ERR]", err) } else if spath[2] == "name" { treatRename(raw_path, team) + } else if spath[2] == "hint" { + treatOpeningHint(raw_path, team) } else { treatSubmission(raw_path, team, spath[2]) } diff --git a/libfic/hint.go b/libfic/hint.go index 46ae6a6f..123d4a02 100644 --- a/libfic/hint.go +++ b/libfic/hint.go @@ -11,6 +11,15 @@ type EHint struct { Cost int64 `json:"cost"` } +func GetHint(id int64) (EHint, error) { + var h EHint + if err := DBQueryRow("SELECT id_hint, id_exercice, title, content, cost FROM exercice_hints WHERE id_hint = ?", id).Scan(&h.Id, &h.IdExercice, &h.Title, &h.Content, &h.Cost); err != nil { + return h, err + } + + return h, nil +} + func (e Exercice) GetHints() ([]EHint, error) { if rows, err := DBQuery("SELECT id_hint, title, content, cost FROM exercice_hints WHERE id_exercice = ?", e.Id); err != nil { return nil, err diff --git a/libfic/team.go b/libfic/team.go index 27fbb40a..03d7a3db 100644 --- a/libfic/team.go +++ b/libfic/team.go @@ -216,6 +216,11 @@ func (t Team) HasHint(h EHint) (bool) { return tm != nil } +func (t Team) OpenHint(h EHint) (error) { + _, err := DBExec("INSERT INTO team_hints (id_team, id_hint, time) VALUES (?, ?, ?)", t.Id, h.Id, time.Now()) + return err +} + func (t Team) HasSolved(e Exercice) (bool, time.Time, int64) { var nb *int64 var tm *time.Time