backend: can open hint
This commit is contained in:
parent
d2d4f8e628
commit
4b20c1dc1e
36
backend/hint.go
Normal file
36
backend/hint.go
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -116,6 +116,8 @@ func treat(raw_path string) {
|
|||||||
log.Println("[ERR]", err)
|
log.Println("[ERR]", err)
|
||||||
} else if spath[2] == "name" {
|
} else if spath[2] == "name" {
|
||||||
treatRename(raw_path, team)
|
treatRename(raw_path, team)
|
||||||
|
} else if spath[2] == "hint" {
|
||||||
|
treatOpeningHint(raw_path, team)
|
||||||
} else {
|
} else {
|
||||||
treatSubmission(raw_path, team, spath[2])
|
treatSubmission(raw_path, team, spath[2])
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,15 @@ type EHint struct {
|
|||||||
Cost int64 `json:"cost"`
|
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) {
|
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 {
|
if rows, err := DBQuery("SELECT id_hint, title, content, cost FROM exercice_hints WHERE id_exercice = ?", e.Id); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -216,6 +216,11 @@ func (t Team) HasHint(h EHint) (bool) {
|
|||||||
return tm != nil
|
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) {
|
func (t Team) HasSolved(e Exercice) (bool, time.Time, int64) {
|
||||||
var nb *int64
|
var nb *int64
|
||||||
var tm *time.Time
|
var tm *time.Time
|
||||||
|
Loading…
Reference in New Issue
Block a user