Implement change order endpoint
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user