package api import ( "encoding/json" "errors" "strconv" "srs.epita.fr/fic-server/libfic" "github.com/julienschmidt/httprouter" ) func init() { router.POST("/api/qa/", apiHandler(importExerciceQA)) router.POST("/api/qa/:qid/comments", apiHandler(qaHandler(importQAComment))) } func qaHandler(f func(fic.QAQuery, []byte) (interface{}, error)) func(httprouter.Params, []byte) (interface{}, error) { return func(ps httprouter.Params, body []byte) (interface{}, error) { if qid, err := strconv.ParseInt(string(ps.ByName("qid")), 10, 64); err != nil { return nil, err } else if query, err := fic.GetQAQuery(qid); err != nil { return nil, err } else { return f(query, body) } } } func importExerciceQA(_ httprouter.Params, body []byte) (interface{}, error) { // Create a new query var uq fic.QAQuery if err := json.Unmarshal(body, &uq); err != nil { return nil, err } var exercice fic.Exercice var err error if uq.IdExercice == 0 { return nil, errors.New("id_exercice not filled") } else if exercice, err = fic.GetExercice(uq.IdExercice); err != nil { return nil, err } if len(uq.State) == 0 { return nil, errors.New("State not filled") } if len(uq.Subject) == 0 { return nil, errors.New("Subject not filled") } if qa, err := exercice.NewQAQuery(uq.Subject, uq.IdTeam, uq.User, uq.State); err != nil { return nil, err } else { qa.Creation = uq.Creation qa.Solved = uq.Solved qa.Closed = qa.Closed _, err = qa.Update() return qa, err } } func importQAComment(query fic.QAQuery, body []byte) (interface{}, error) { // Create a new query var uc fic.QAComment if err := json.Unmarshal(body, &uc); err != nil { return nil, err } if len(uc.Content) == 0 { return nil, errors.New("Empty comment") } if qac, err := query.AddComment(uc.Content, uc.IdTeam, uc.User); err != nil { return nil, err } else { qac.Date = uc.Date _, err = qac.Update() return qac, err } }