mirror of
https://github.com/nkanaev/yarr.git
synced 2026-06-09 18:03:19 +00:00
refactor folder update in storage
This commit is contained in:
@@ -141,12 +141,10 @@ func (s *Server) handleFolder(c *router.Context) {
|
|||||||
c.Out.WriteHeader(http.StatusBadRequest)
|
c.Out.WriteHeader(http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if body.Title != nil {
|
s.db.UpdateFolder(id, storage.UpdateFolderParams{
|
||||||
s.db.RenameFolder(id, *body.Title)
|
Title: body.Title,
|
||||||
}
|
IsExpanded: body.IsExpanded,
|
||||||
if body.IsExpanded != nil {
|
})
|
||||||
s.db.ToggleFolderExpanded(id, *body.IsExpanded)
|
|
||||||
}
|
|
||||||
c.Out.WriteHeader(http.StatusOK)
|
c.Out.WriteHeader(http.StatusOK)
|
||||||
} else if c.Req.Method == "DELETE" {
|
} else if c.Req.Method == "DELETE" {
|
||||||
s.db.DeleteFolder(id)
|
s.db.DeleteFolder(id)
|
||||||
|
|||||||
@@ -38,20 +38,27 @@ func (s *Storage) DeleteFolder(folderId int64) bool {
|
|||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) RenameFolder(folderId int64, newTitle string) bool {
|
type UpdateFolderParams struct {
|
||||||
_, err := s.db.Exec(`update folders set title = :title where id = :id`,
|
Title *string
|
||||||
sql.Named("title", newTitle),
|
IsExpanded *bool
|
||||||
sql.Named("id", folderId),
|
|
||||||
)
|
|
||||||
return err == nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) ToggleFolderExpanded(folderId int64, isExpanded bool) bool {
|
func (s *Storage) UpdateFolder(folderId int64, params UpdateFolderParams) (bool, error) {
|
||||||
_, err := s.db.Exec(`update folders set is_expanded = :is_expanded where id = :id`,
|
_, err := s.db.Exec(`
|
||||||
sql.Named("is_expanded", isExpanded),
|
update folders set
|
||||||
|
title = coalesce(:title, title),
|
||||||
|
is_expanded = coalesce(:is_expanded, is_expanded)
|
||||||
|
where id = :id
|
||||||
|
`,
|
||||||
sql.Named("id", folderId),
|
sql.Named("id", folderId),
|
||||||
|
sql.Named("title", params.Title),
|
||||||
|
sql.Named("is_expanded", params.IsExpanded),
|
||||||
)
|
)
|
||||||
return err == nil
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) ListFolders() []Folder {
|
func (s *Storage) ListFolders() []Folder {
|
||||||
|
|||||||
78
src/storage/folder_test.go
Normal file
78
src/storage/folder_test.go
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUpdateFolder(t *testing.T) {
|
||||||
|
db := testDB()
|
||||||
|
folder := db.CreateFolder("old title")
|
||||||
|
if folder.IsExpanded != true {
|
||||||
|
t.Fatal("expected folder to be expanded by default")
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("rename only", func(t *testing.T) {
|
||||||
|
newTitle := "new title"
|
||||||
|
ok, err := db.UpdateFolder(folder.Id, UpdateFolderParams{
|
||||||
|
Title: &newTitle,
|
||||||
|
})
|
||||||
|
if !ok || err != nil {
|
||||||
|
t.Fatalf("UpdateFolder failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
folders := db.ListFolders()
|
||||||
|
if len(folders) != 1 || folders[0].Title != "new title" {
|
||||||
|
t.Errorf("expected title to be updated, got %s", folders[0].Title)
|
||||||
|
}
|
||||||
|
if folders[0].IsExpanded != true {
|
||||||
|
t.Error("expected expansion state to remain unchanged")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("toggle expanded only", func(t *testing.T) {
|
||||||
|
isExpanded := false
|
||||||
|
ok, err := db.UpdateFolder(folder.Id, UpdateFolderParams{
|
||||||
|
IsExpanded: &isExpanded,
|
||||||
|
})
|
||||||
|
if !ok || err != nil {
|
||||||
|
t.Fatalf("UpdateFolder failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
folders := db.ListFolders()
|
||||||
|
if len(folders) != 1 || folders[0].IsExpanded != false {
|
||||||
|
t.Errorf("expected is_expanded to be false, got %v", folders[0].IsExpanded)
|
||||||
|
}
|
||||||
|
if folders[0].Title != "new title" {
|
||||||
|
t.Error("expected title to remain unchanged")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("update both", func(t *testing.T) {
|
||||||
|
bothTitle := "both"
|
||||||
|
isExpanded := true
|
||||||
|
ok, err := db.UpdateFolder(folder.Id, UpdateFolderParams{
|
||||||
|
Title: &bothTitle,
|
||||||
|
IsExpanded: &isExpanded,
|
||||||
|
})
|
||||||
|
if !ok || err != nil {
|
||||||
|
t.Fatalf("UpdateFolder failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
folders := db.ListFolders()
|
||||||
|
if len(folders) != 1 || folders[0].Title != "both" || folders[0].IsExpanded != true {
|
||||||
|
t.Errorf("expected both to be updated, got title=%s expanded=%v", folders[0].Title, folders[0].IsExpanded)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("update none", func(t *testing.T) {
|
||||||
|
ok, err := db.UpdateFolder(folder.Id, UpdateFolderParams{})
|
||||||
|
if !ok || err != nil {
|
||||||
|
t.Fatalf("UpdateFolder failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
folders := db.ListFolders()
|
||||||
|
if len(folders) != 1 || folders[0].Title != "both" || folders[0].IsExpanded != true {
|
||||||
|
t.Errorf("expected no changes, got title=%s expanded=%v", folders[0].Title, folders[0].IsExpanded)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user