diff --git a/sui/api/api.go b/sui/api/api.go index 78c245c2..6b37e6f9 100644 --- a/sui/api/api.go +++ b/sui/api/api.go @@ -129,6 +129,12 @@ var dsl = []byte(` "process": "sui.Page.Duplicate", "in": ["$param.id", "$param.template_id", "$param.route", ":payload"], "out": { "status": 200, "type": "application/json" } + },{ + "path": "/:id/page/rename/:template_id/*route", + "method": "POST", + "process": "sui.Page.Rename", + "in": ["$param.id", "$param.template_id", "$param.route", ":payload"], + "out": { "status": 200, "type": "application/json" } },{ "path": "/:id/page/exist/:template_id/*route", "method": "GET", diff --git a/sui/api/process.go b/sui/api/process.go index 6d53cf3b..8871d30e 100644 --- a/sui/api/process.go +++ b/sui/api/process.go @@ -41,6 +41,7 @@ func init() { "page.savetemp": PageSaveTemp, "page.create": PageCreate, "page.duplicate": PageDuplicate, + "page.rename": PageRename, "page.remove": PageRemove, "page.exist": PageExist, "page.asset": PageAsset, @@ -574,6 +575,45 @@ func PageCreate(process *process.Process) interface{} { return nil } +// PageRename handle the find Template request +func PageRename(process *process.Process) interface{} { + process.ValidateArgNums(3) + sui := get(process) + templateID := process.ArgsString(1) + copyfrom := process.ArgsString(2) + payload := process.ArgsMap(3, map[string]interface{}{}) + + tmpl, err := sui.GetTemplate(templateID) + if err != nil { + exception.New(err.Error(), 500).Throw() + } + + page, err := tmpl.Page(copyfrom) + if err != nil { + exception.New(err.Error(), 500).Throw() + } + + // Get the route from payload + route, ok := payload["route"].(string) + if !ok { + exception.New("the route is required", 400).Throw() + } + + // Rename + _, err = page.SaveAs(route, nil) + if err != nil { + exception.New(err.Error(), 500).Throw() + } + + // delete the old page + err = tmpl.RemovePage(copyfrom) + if err != nil { + exception.New(err.Error(), 500).Throw() + } + + return nil +} + // PageDuplicate handle the find Template request func PageDuplicate(process *process.Process) interface{} { process.ValidateArgNums(3) diff --git a/sui/api/process_test.go b/sui/api/process_test.go index d0489837..6fbb6370 100644 --- a/sui/api/process_test.go +++ b/sui/api/process_test.go @@ -333,6 +333,43 @@ func TestPageCreate(t *testing.T) { assert.Nil(t, res) } +func TestPageRename(t *testing.T) { + + load(t) + defer clean() + defer func() { + _, err := process.New("sui.page.remove", "demo", "tech-blue", "/unit-test-2").Exec() + if err != nil { + t.Fatal(err) + } + }() + + // test demo + p, err := process.Of("sui.page.create", "demo", "tech-blue", "/unit-test") + if err != nil { + t.Fatal(err) + } + + res, err := p.Exec() + if err != nil { + t.Fatal(err) + } + + assert.Nil(t, res) + + // rename + p, err = process.Of("sui.page.rename", "demo", "tech-blue", "/unit-test", map[string]interface{}{"route": "/unit-test-2"}) + if err != nil { + t.Fatal(err) + } + + res, err = p.Exec() + if err != nil { + t.Fatal(err) + } + assert.Nil(t, res) +} + func TestPageDuplicate(t *testing.T) { load(t) diff --git a/sui/storages/local/page.go b/sui/storages/local/page.go index c6b0e0c4..21cbafc1 100644 --- a/sui/storages/local/page.go +++ b/sui/storages/local/page.go @@ -199,6 +199,15 @@ func (tmpl *Template) RemovePage(route string) error { return err } + // Remove .tmp directory + tmpPath := filepath.Join(tmpl.Root, route, ".tmp") + if exist, _ := tmpl.local.fs.Exists(tmpPath); exist { + err = tmpl.local.fs.RemoveAll(tmpPath) + if err != nil { + return err + } + } + return tmpl.removeEmptyPath(path) } @@ -208,14 +217,7 @@ func (tmpl *Template) removeEmptyPath(path string) error { return err } - skipTempDirs := []string{} - for _, dir := range dirs { - if !strings.HasPrefix(dir, ".tmp") { - skipTempDirs = append(skipTempDirs, dir) - } - } - - if len(skipTempDirs) == 0 { + if len(dirs) == 0 { err = tmpl.local.fs.RemoveAll(path) if err != nil { return err