new tree crud test

This commit is contained in:
Bel LaPointe
2022-02-09 11:20:45 -07:00
parent ba154be6c2
commit eedb6cc6a5
4 changed files with 119 additions and 442 deletions

View File

@@ -12,10 +12,8 @@ import (
"net/http"
"os"
"path"
"path/filepath"
"regexp"
"strings"
"time"
"github.com/google/uuid"
)
@@ -83,7 +81,8 @@ func (server *Server) apiV0TreeHandler(w http.ResponseWriter, r *http.Request) e
func (server *Server) apiV0TreePrettyHandler(w http.ResponseWriter, r *http.Request) error {
tree := server.tree()
branches, err := tree.GetPretty()
//branches, err := tree.GetPretty()
branches, err := tree.GetRoot()
if err != nil {
return err
}
@@ -92,7 +91,7 @@ func (server *Server) apiV0TreePrettyHandler(w http.ResponseWriter, r *http.Requ
func (server *Server) apiV0TreePlainHandler(w http.ResponseWriter, r *http.Request) error {
tree := server.tree()
branches, err := tree.Get()
branches, err := tree.GetRoot()
if err != nil {
return err
}
@@ -137,12 +136,7 @@ func (server *Server) apiV0MediaIDDelHandler(w http.ResponseWriter, r *http.Requ
func (server *Server) apiV0MediaIDGetHandler(w http.ResponseWriter, r *http.Request) error {
id := path.Base(r.URL.Path)
tree := server.tree()
fullId, err := tree.FullId(id)
if err != nil {
return err
}
return server.getContentHandler(server.diskMediaPath(fullId), w, r)
return server.getContentHandler(server.diskMediaPath(id), w, r)
}
func (server *Server) getContentHandler(filePath string, w http.ResponseWriter, r *http.Request) error {
@@ -217,15 +211,7 @@ func (server *Server) rootHandler(w http.ResponseWriter, r *http.Request) error
}
func (server *Server) tree() *Tree {
return NewTree(path.Dir(server.diskFileDir("id")))
}
func (server *Server) diskFileDir(id string) string {
return path.Dir(server.diskFilePath(id))
}
func (server *Server) diskFilePath(id string) string {
return path.Join(server.root, "files", id, "data")
return nil
}
func (server *Server) diskMediaPath(id string) string {
@@ -233,109 +219,11 @@ func (server *Server) diskMediaPath(id string) string {
}
func (server *Server) apiV0FilesHandler(w http.ResponseWriter, r *http.Request) error {
fileDir := server.diskFileDir("id")
tree := server.tree()
if pid := r.Header.Get("PID"); pid == "" {
} else if fullId, err := tree.FullId(pid); err != nil {
return err
} else {
fileDir = server.diskFileDir(fullId)
}
id, err := server.postContentHandler(fileDir, w, r)
if err != nil {
return err
}
if err := tree.Put(id, Branch{
Title: r.Header.Get("Title"),
PID: r.Header.Get("PID"),
}); err != nil {
return err
}
return json.NewEncoder(w).Encode(map[string]map[string]string{
"data": map[string]string{
"filePath": path.Join("/api/v0/files", id),
},
})
return errors.New("not impl")
}
func (server *Server) apiV0FilesIDHandler(w http.ResponseWriter, r *http.Request) error {
switch r.Method {
case http.MethodPut:
return server.apiV0FilesIDPutHandler(w, r)
case http.MethodGet:
return server.apiV0FilesIDGetHandler(w, r)
case http.MethodDelete:
return server.apiV0FilesIDDelHandler(w, r)
}
http.NotFound(w, r)
return nil
}
func (server *Server) apiV0FilesIDPutHandler(w http.ResponseWriter, r *http.Request) error {
id := path.Base(r.URL.Path)
tree := server.tree()
branches, err := tree.Get()
if err != nil {
return err
}
branch, _ := branches[id]
branch.Updated = time.Now().UTC()
if title := r.Header.Get("Title"); title != "" {
branch.Title = title
}
if pid := r.Header.Get("PID"); pid != "" {
branch.PID = pid
}
branch.Deleted = false
fullPid, err := tree.FullId(branch.PID)
if err != nil {
return err
}
fullId := path.Join(fullPid, id)
if err := server.putContentHandler(server.diskFilePath(fullId), w, r); err != nil {
return err
}
if err := tree.Put(id, branch); err != nil {
return err
}
return json.NewEncoder(w).Encode(map[string]map[string]string{
"data": map[string]string{
"filePath": path.Join("/api/v0/files", id),
},
})
}
func (server *Server) apiV0FilesIDGetHandler(w http.ResponseWriter, r *http.Request) error {
tree := server.tree()
branches, err := tree.Get()
if err != nil {
return err
}
id := path.Base(r.URL.Path)
fullId, err := tree.FullId(id)
if err != nil {
return err
}
branch, _ := branches[id]
w.Header().Set("Title", branch.Title)
w.Header().Set("PID", branch.PID)
return server.getContentHandler(server.diskFilePath(fullId), w, r)
}
func (server *Server) apiV0FilesIDDelHandler(w http.ResponseWriter, r *http.Request) error {
tree := server.tree()
branches, err := tree.Get()
if err != nil {
return err
}
id := path.Base(r.URL.Path)
branch, ok := branches[id]
if !ok {
return nil
}
branch.Deleted = true
branch.Updated = time.Now().UTC()
return tree.Put(id, branch)
return errors.New("not impl")
}
func (server *Server) apiV0SearchHandler(w http.ResponseWriter, r *http.Request) error {
@@ -357,30 +245,5 @@ func (server *Server) apiV0SearchHandler(w http.ResponseWriter, r *http.Request)
w.Write([]byte(`[]`))
return nil
}
results := []string{}
if err := filepath.Walk(server.diskFileDir("id"), func(p string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
if info.Name() != "data" {
return nil
}
b, err := ioutil.ReadFile(p)
if err != nil {
return err
}
for _, pattern := range patterns {
if !pattern.Match(b) {
return nil
}
}
results = append(results, path.Base(p))
return err
}); err != nil {
return err
}
return json.NewEncoder(w).Encode(results)
return errors.New("not impl")
}