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 {
|
||||
newList, err := list.New(r)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -16,12 +16,18 @@ func (a *Ajax) Cur(r *http.Request) (string, string, []string) {
|
|||
listID := form.Get(r, "list")
|
||||
taskID := form.Get(r, "id")
|
||||
if listID == "" {
|
||||
a.storageGet(path.Join("task", taskID, "map"), &listID)
|
||||
listID, _ = a.taskIDToListID(taskID)
|
||||
}
|
||||
tags, _ := r.URL.Query()["t"]
|
||||
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) {
|
||||
results, err := a.DB.List(nil, path.Join("list"), path.Join("list", "}"))
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,9 @@ import (
|
|||
"fmt"
|
||||
"local/todo-server/server/ajax/form"
|
||||
"local/todo-server/server/ajax/task"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
|
|
@ -45,6 +47,10 @@ func (a *Ajax) loadTasks(w http.ResponseWriter, r *http.Request) error {
|
|||
if err != nil {
|
||||
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})
|
||||
}
|
||||
|
||||
|
|
@ -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 {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
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