Implement change order endpoint
parent
48e8b91039
commit
c756c005ac
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 675 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 342 B |
|
|
@ -21,10 +21,6 @@ func (a *Ajax) loadLists(w http.ResponseWriter, r *http.Request) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Ajax) changeOrder(w http.ResponseWriter, r *http.Request) error {
|
|
||||||
return errors.New("not impl")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *Ajax) addList(w http.ResponseWriter, r *http.Request) error {
|
func (a *Ajax) addList(w http.ResponseWriter, r *http.Request) error {
|
||||||
newList, err := list.New(r)
|
newList, err := list.New(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,18 @@ func (a *Ajax) Cur(r *http.Request) (string, string, []string) {
|
||||||
listID := form.Get(r, "list")
|
listID := form.Get(r, "list")
|
||||||
taskID := form.Get(r, "id")
|
taskID := form.Get(r, "id")
|
||||||
if listID == "" {
|
if listID == "" {
|
||||||
a.storageGet(path.Join("task", taskID, "map"), &listID)
|
listID, _ = a.taskIDToListID(taskID)
|
||||||
}
|
}
|
||||||
tags, _ := r.URL.Query()["t"]
|
tags, _ := r.URL.Query()["t"]
|
||||||
return listID, taskID, tags
|
return listID, taskID, tags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *Ajax) taskIDToListID(taskID string) (string, error) {
|
||||||
|
var listID string
|
||||||
|
err := a.storageGet(path.Join("task", taskID, "map"), &listID)
|
||||||
|
return listID, err
|
||||||
|
}
|
||||||
|
|
||||||
func (a *Ajax) storageListLists(filters ...func(t *list.List) bool) ([]*list.List, error) {
|
func (a *Ajax) storageListLists(filters ...func(t *list.List) bool) ([]*list.List, error) {
|
||||||
results, err := a.DB.List(nil, path.Join("list"), path.Join("list", "}"))
|
results, err := a.DB.List(nil, path.Join("list"), path.Join("list", "}"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"local/todo-server/server/ajax/form"
|
"local/todo-server/server/ajax/form"
|
||||||
"local/todo-server/server/ajax/task"
|
"local/todo-server/server/ajax/task"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -45,6 +47,10 @@ func (a *Ajax) loadTasks(w http.ResponseWriter, r *http.Request) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
log.Println(listID)
|
||||||
|
for _, task := range tasks {
|
||||||
|
log.Println(task.Index, task.Title)
|
||||||
|
}
|
||||||
return json.NewEncoder(w).Encode(map[string]interface{}{"list": tasks})
|
return json.NewEncoder(w).Encode(map[string]interface{}{"list": tasks})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -147,3 +153,56 @@ func (a *Ajax) moveTask(w http.ResponseWriter, r *http.Request) error {
|
||||||
func (a *Ajax) parseTaskStr(w http.ResponseWriter, r *http.Request) error {
|
func (a *Ajax) parseTaskStr(w http.ResponseWriter, r *http.Request) error {
|
||||||
return errors.New("not impl")
|
return errors.New("not impl")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *Ajax) changeOrder(w http.ResponseWriter, r *http.Request) error {
|
||||||
|
order := form.Get(r, "order")
|
||||||
|
orders := strings.Split(order, "&")
|
||||||
|
sum := 0
|
||||||
|
zero := ""
|
||||||
|
for _, order := range orders {
|
||||||
|
taskIDDelta := strings.Split(order, "=")
|
||||||
|
if len(taskIDDelta) < 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
taskID := taskIDDelta[0]
|
||||||
|
delta, _ := strconv.Atoi(taskIDDelta[1])
|
||||||
|
if delta < 0 {
|
||||||
|
delta = -1
|
||||||
|
} else {
|
||||||
|
delta = 0
|
||||||
|
}
|
||||||
|
task, err := a.storageGetTask(taskID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
listID, err := a.taskIDToListID(taskID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
task.Index += delta
|
||||||
|
if err := a.storageSetTask(listID, task); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if delta == 0 {
|
||||||
|
zero = taskID
|
||||||
|
}
|
||||||
|
sum += delta
|
||||||
|
}
|
||||||
|
if zero == "" || sum == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
task, err := a.storageGetTask(zero)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
listID, err := a.taskIDToListID(zero)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
task.Index -= sum
|
||||||
|
if err := a.storageSetTask(listID, task); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprint(w, `{"total":1}`)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -177,3 +177,33 @@ func TestAjaxMoveTask(t *testing.T) {
|
||||||
t.Error(err, task)
|
t.Error(err, task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAjaxChangeOrder(t *testing.T) {
|
||||||
|
ajax := mockAjax()
|
||||||
|
ajax.storageSetTask("list", &task.Task{UUID: "b", Title: "c", Index: 5})
|
||||||
|
ajax.storageSetTask("list", &task.Task{UUID: "d", Title: "e", Index: 6})
|
||||||
|
ajax.storageSetTask("list", &task.Task{UUID: "f", Title: "g", Index: 7})
|
||||||
|
w := httptest.NewRecorder()
|
||||||
|
r := httptest.NewRequest("POST", "/", strings.NewReader(`order=b%3d0%26d%3d-1%26f%3d-1%26`))
|
||||||
|
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
ajax.changeOrder(w, r)
|
||||||
|
if v := w.Code; v != http.StatusOK {
|
||||||
|
t.Error(v)
|
||||||
|
}
|
||||||
|
tasks, err := ajax.storageListTasks("list")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(tasks) != 3 {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if tasks[0].UUID != "d" {
|
||||||
|
t.Error(tasks[0])
|
||||||
|
}
|
||||||
|
if tasks[1].UUID != "f" {
|
||||||
|
t.Error(tasks[1])
|
||||||
|
}
|
||||||
|
if tasks[2].UUID != "b" {
|
||||||
|
t.Error(tasks[2])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue