Implement change order endpoint

master
bel 2019-12-01 17:31:30 -07:00
parent 48e8b91039
commit c756c005ac
8 changed files with 96 additions and 5 deletions

BIN
public/images/buttons.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
public/images/calendar.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

BIN
public/images/mzl.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
public/images/page_white_text.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

View File

@ -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 {

View File

@ -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 {

View File

@ -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
}

View File

@ -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])
}
}