Unittesting begins
This commit is contained in:
115
server/ajax/storage.go
Normal file
115
server/ajax/storage.go
Normal file
@@ -0,0 +1,115 @@
|
||||
package ajax
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/gob"
|
||||
"local/todo-server/server/ajax/form"
|
||||
"local/todo-server/server/ajax/task"
|
||||
"net/http"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (a *Ajax) Cur(r *http.Request) (string, string, []string) {
|
||||
listID, _ := a.storageGetCur()
|
||||
taskID := form.Get(r, "id")
|
||||
tags, _ := a.storageGetCurTags()
|
||||
return listID, taskID, tags
|
||||
}
|
||||
|
||||
func (a *Ajax) storageListTasks(listID string, filters ...func(t *task.Task) bool) ([]*task.Task, error) {
|
||||
results, err := a.DB.List(nil, listID+"/", listID+"/}")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tasks := []*task.Task{}
|
||||
for _, result := range results {
|
||||
taskID := strings.TrimPrefix(result, listID+"/")
|
||||
task, err := a.storageGetTask(listID, taskID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filtered := true
|
||||
for _, f := range filters {
|
||||
if !f(task) {
|
||||
filtered = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if filtered {
|
||||
tasks = append(tasks, task)
|
||||
}
|
||||
}
|
||||
return tasks, nil
|
||||
}
|
||||
|
||||
func (a *Ajax) storageGetTask(listID, taskID string) (*task.Task, error) {
|
||||
var task task.Task
|
||||
err := a.storageGet(path.Join(listID, taskID), &task)
|
||||
return &task, err
|
||||
}
|
||||
|
||||
func (a *Ajax) storageSetTask(listID, taskID string, task *task.Task) error {
|
||||
return a.storageSet(path.Join(listID, taskID), *task)
|
||||
}
|
||||
|
||||
func (a *Ajax) storageDelTask(listID, taskID string) error {
|
||||
return a.storageDel(path.Join(listID, taskID))
|
||||
}
|
||||
|
||||
func (a *Ajax) storageGetList(listID string) (*List, error) {
|
||||
var list List
|
||||
err := a.storageGet(listID, &list)
|
||||
return &list, err
|
||||
}
|
||||
|
||||
func (a *Ajax) storageSetList(listID string, list *List) error {
|
||||
return a.storageSet(listID, *list)
|
||||
}
|
||||
|
||||
func (a *Ajax) storageDelList(listID string) error {
|
||||
return a.storageDel(listID)
|
||||
}
|
||||
|
||||
func (a *Ajax) storageSetCurTags(tags []string) error {
|
||||
return a.storageSet("currentTags", tags)
|
||||
}
|
||||
|
||||
func (a *Ajax) storageGetCurTags() ([]string, error) {
|
||||
var tags []string
|
||||
err := a.storageGet("currentTags", &tags)
|
||||
return tags, err
|
||||
}
|
||||
|
||||
func (a *Ajax) storageSetCur(listID string) error {
|
||||
return a.storageSet("currentList", listID)
|
||||
}
|
||||
|
||||
func (a *Ajax) storageGetCur() (string, error) {
|
||||
var listID string
|
||||
err := a.storageGet("currentList", &listID)
|
||||
return listID, err
|
||||
}
|
||||
|
||||
func (a *Ajax) storageSet(key string, value interface{}) error {
|
||||
buff := bytes.NewBuffer(nil)
|
||||
encoder := gob.NewEncoder(buff)
|
||||
if err := encoder.Encode(value); err != nil {
|
||||
return err
|
||||
}
|
||||
return a.DB.Set(key, buff.Bytes())
|
||||
}
|
||||
|
||||
func (a *Ajax) storageGet(key string, value interface{}) error {
|
||||
b, err := a.DB.Get(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
buff := bytes.NewBuffer(b)
|
||||
decoder := gob.NewDecoder(buff)
|
||||
return decoder.Decode(value)
|
||||
}
|
||||
|
||||
func (a *Ajax) storageDel(key string) error {
|
||||
return a.DB.Set(key, nil)
|
||||
}
|
||||
Reference in New Issue
Block a user