diff --git a/libfic/db.go b/libfic/db.go index 8eb3de41..185c82b5 100644 --- a/libfic/db.go +++ b/libfic/db.go @@ -499,6 +499,7 @@ CREATE TABLE IF NOT EXISTS exercices_qa( state VARCHAR(255) NOT NULL, solved TIMESTAMP NULL, closed TIMESTAMP NULL, + exported INTEGER NULL, FOREIGN KEY(id_exercice) REFERENCES exercices(id_exercice), FOREIGN KEY(id_team) REFERENCES teams(id_team) ) DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; diff --git a/libfic/qa.go b/libfic/qa.go index 0042efe4..bfd8b990 100644 --- a/libfic/qa.go +++ b/libfic/qa.go @@ -16,26 +16,27 @@ type QAQuery struct { Subject string `json:"subject"` Solved *time.Time `json:"solved,omitempty"` Closed *time.Time `json:"closed,omitempty"` + Exported *int64 `json:"exported,omitempty"` } // GetQAQuery retrieves the query with the given identifier. func GetQAQuery(id int64) (q *QAQuery, err error) { q = &QAQuery{} - err = DBQueryRow("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed FROM exercices_qa WHERE id_qa = ?", id).Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed) + err = DBQueryRow("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed, exported FROM exercices_qa WHERE id_qa = ?", id).Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed, &q.Exported) return } // GetQAQueries returns a list of all QAQuery registered in the database. func GetQAQueries() (res []*QAQuery, err error) { var rows *sql.Rows - if rows, err = DBQuery("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed FROM exercices_qa"); err != nil { + if rows, err = DBQuery("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed, exported FROM exercices_qa"); err != nil { return } defer rows.Close() for rows.Next() { q := &QAQuery{} - if err = rows.Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed); err != nil { + if err = rows.Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed, &q.Exported); err != nil { return } res = append(res, q) @@ -48,14 +49,14 @@ func GetQAQueries() (res []*QAQuery, err error) { // GetQAQueries returns a list of all QAQuery registered for the Exercice. func (e *Exercice) GetQAQueries() (res []*QAQuery, err error) { var rows *sql.Rows - if rows, err = DBQuery("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed FROM exercices_qa WHERE id_exercice = ?", e.Id); err != nil { + if rows, err = DBQuery("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed, exported FROM exercices_qa WHERE id_exercice = ?", e.Id); err != nil { return nil, err } defer rows.Close() for rows.Next() { q := &QAQuery{} - if err = rows.Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed); err != nil { + if err = rows.Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed, &q.Exported); err != nil { return } res = append(res, q) @@ -68,14 +69,14 @@ func (e *Exercice) GetQAQueries() (res []*QAQuery, err error) { // GetQAQueries returns a list of all QAQuery registered for the Exercice. func (t *Team) GetQAQueries() (res []*QAQuery, err error) { var rows *sql.Rows - if rows, err = DBQuery("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed FROM exercices_qa WHERE id_team = ?", t.Id); err != nil { + if rows, err = DBQuery("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed, exported FROM exercices_qa WHERE id_team = ?", t.Id); err != nil { return nil, err } defer rows.Close() for rows.Next() { q := &QAQuery{} - if err = rows.Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed); err != nil { + if err = rows.Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed, &q.Exported); err != nil { return } res = append(res, q) @@ -88,7 +89,7 @@ func (t *Team) GetQAQueries() (res []*QAQuery, err error) { // GetQAQuery retrieves the query with the given identifier. func (e *Exercice) GetQAQuery(id int64) (q *QAQuery, err error) { q = &QAQuery{} - err = DBQueryRow("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed FROM exercices_qa WHERE id_qa = ? AND id_exercice = ?", id, e.Id).Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed) + err = DBQueryRow("SELECT id_qa, id_exercice, id_team, authuser, creation, state, subject, solved, closed, exported FROM exercices_qa WHERE id_qa = ? AND id_exercice = ?", id, e.Id).Scan(&q.Id, &q.IdExercice, &q.IdTeam, &q.User, &q.Creation, &q.State, &q.Subject, &q.Solved, &q.Closed, &q.Exported) return } @@ -99,13 +100,13 @@ func (e *Exercice) NewQAQuery(subject string, teamId *int64, user string, state } else if qid, err := res.LastInsertId(); err != nil { return nil, err } else { - return &QAQuery{qid, e.Id, teamId, user, time.Now(), state, subject, solved, nil}, nil + return &QAQuery{qid, e.Id, teamId, user, time.Now(), state, subject, solved, nil, nil}, nil } } // Update applies modifications back to the database. func (q *QAQuery) Update() (int64, error) { - if res, err := DBExec("UPDATE exercices_qa SET subject = ?, id_team = ?, authuser = ?, id_exercice = ?, creation = ?, state = ?, solved = ?, closed = ? WHERE id_qa = ?", q.Subject, q.IdTeam, q.User, q.IdExercice, q.Creation, q.State, q.Solved, q.Closed, q.Id); err != nil { + if res, err := DBExec("UPDATE exercices_qa SET subject = ?, id_team = ?, authuser = ?, id_exercice = ?, creation = ?, state = ?, solved = ?, closed = ?, exported = ? WHERE id_qa = ?", q.Subject, q.IdTeam, q.User, q.IdExercice, q.Creation, q.State, q.Solved, q.Closed, q.Exported, q.Id); err != nil { return 0, err } else if nb, err := res.RowsAffected(); err != nil { return 0, err diff --git a/qa/ui/src/lib/qa.js b/qa/ui/src/lib/qa.js index 2b36c0da..ff049544 100644 --- a/qa/ui/src/lib/qa.js +++ b/qa/ui/src/lib/qa.js @@ -20,7 +20,7 @@ export class QAQuery { } } - update({ id, id_exercice, id_team, user, creation, state, subject, solved, closed }) { + update({ id, id_exercice, id_team, user, creation, state, subject, solved, closed, exported }) { this.id = id; this.id_team = id_team; this.id_exercice = id_exercice; @@ -30,6 +30,7 @@ export class QAQuery { this.subject = subject; this.solved = solved; this.closed = closed; + this.exported = exported; } async delete() {