// :WEBAPI: // { // "url": "{schema}://{host}/api/v1/tasks/{taskid}", // "method": "DELETE", // "arguments": [ // {"name": "taskid", "type": "integer", "description": "task number"} // ], // "description": "Removes specified task" // } func TaskDeleteHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { p, ok := ctx.Value("http.request.query.params").(*url.Values) if !ok { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to obtain params from context") return } st, ok := ctx.Value("app.database").(db.Session) if !ok { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to obtain database from context") return } taskID := task.MakeID(util.ToInt64(p.Get("task"))) if err := task.Delete(st, taskID); err != nil { if db.IsNotFound(err) { ahttp.HTTPResponse(w, http.StatusNotFound, "Not found") } else { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to delete: %v", err) } return } if err := subtask.Delete(st, taskID); err != nil { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to delete subtasks: %v", err) return } ahttp.HTTPResponse(w, http.StatusOK, "OK") }
// :WEBAPI: // { // "url": "{schema}://{host}/api/v1/tasks/{taskid}", // "method": "POST", // "arguments": [ // {"name": "taskid", "type": "integer", "description": "task number"} // ], // "description": "Updates existing task" // } func TaskUpdateHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { p, ok := ctx.Value("http.request.query.params").(*url.Values) if !ok { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to obtain params from context") return } st, ok := ctx.Value("app.database").(db.Session) if !ok { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to obtain database from context") return } msg, err := ioutil.ReadAll(r.Body) if err != nil { ahttp.HTTPResponse(w, http.StatusBadRequest, "Unable to read body: %s", err) return } logger.GetHTTPEntry(ctx).WithFields(nil).Infof("TaskUpdateHandler: Request body: %s", string(msg)) ev := task.NewTaskEvent() if err = json.Unmarshal(msg, ev); err != nil { ahttp.HTTPResponse(w, http.StatusBadRequest, "Invalid JSON: %s", err) return } taskID := task.MakeID(util.ToInt64(p.Get("task"))) t, err := task.Read(st, taskID) if err != nil { if db.IsNotFound(err) { ahttp.HTTPResponse(w, http.StatusNotFound, "Not found") } else { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to read: %v", err) } return } t.TaskID.Set(util.ToInt64(p.Get("task"))) if !t.TimeCreate.IsDefined() { t.TimeCreate.Set(time.Now().Unix()) } fillTask(t, ev) logger.GetHTTPEntry(ctx).WithFields(nil).Infof("TaskUpdateHandler: Task: %+v", t) if !writeTask(ctx, w, t) { return } ahttp.HTTPResponse(w, http.StatusOK, "OK") }
// :WEBAPI: // { // "url": "{schema}://{host}/api/v1/tasks/{taskid}", // "method": "GET", // "arguments": [ // {"name": "taskid", "type": "integer", "description": "task number"} // ], // "description": "Returns information about specified task" // } func TaskGetHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { p, ok := ctx.Value("http.request.query.params").(*url.Values) if !ok { ahttp.HTTPResponse(w, http.StatusInternalServerError, "Unable to obtain params from context") return } apiGet(ctx, w, r, Query{ CollName: task.CollName, Pattern: task.MakeID(util.ToInt64(p.Get("task"))), One: func(query db.Query) (interface{}, error) { t := task.New() err := query.One(t) return t, err }, }) }