package routers import ( "encoding/json" "io/ioutil" "log" "main/models" "main/utils" "net/http" "strconv" "github.com/gorilla/mux" "github.com/gorilla/websocket" ) func TasksGet(w http.ResponseWriter, r *http.Request) { var listview models.ListView listview.Page = utils.ParamInt(r.URL.Query().Get("page"), 1) listview.PageSize = utils.ParamInt(r.URL.Query().Get("pageSize"), 10) listview.List = models.QueryTasks(listview.Page, listview.PageSize) listview.Total = models.CountTasks() listview.Next = listview.Page*listview.PageSize < listview.Total w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(listview.ToJSON()) } func TasksPost(w http.ResponseWriter, r *http.Request) { var task models.Task body, err := ioutil.ReadAll(r.Body) if err != nil { log.Println(err) return } defer r.Body.Close() if err = json.Unmarshal(body, &task); err != nil { log.Println(err) return } task.Create() w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(task)) } func TasksItemGet(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Upgrade") == "websocket" { vars := mux.Vars(r) id, _ := strconv.Atoi(vars["id"]) task := models.QueryTask(id) if task.ID == 0 { w.WriteHeader(http.StatusNotFound) return } upgrader := websocket.Upgrader{} ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer ws.Close() for { _, message, err := ws.ReadMessage() if err != nil { log.Println(err) break } task.Status = string(message) task.Update() } return } task := models.Task{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} task.Get() w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(task)) } func TasksItemPatch(w http.ResponseWriter, r *http.Request) { var task models.Task body, err := ioutil.ReadAll(r.Body) if err != nil { log.Println(err) return } defer r.Body.Close() if err = json.Unmarshal(body, &task); err != nil { log.Println(err) return } task.ID = utils.ParamInt(mux.Vars(r)["id"], 0) task.Update() w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Write(utils.ToJSON(task)) } func TasksItemDelete(w http.ResponseWriter, r *http.Request) { task := models.Task{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} task.Delete() if task.ID == 0 { w.WriteHeader(http.StatusNotFound) return } task.Delete() w.WriteHeader(http.StatusNoContent) }