Merge pull request #520 from trheyi/main

[add] builder page create and remove apis
This commit is contained in:
Max 2023-12-12 17:52:48 +08:00 committed by GitHub
commit 20db5348a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 65 additions and 32 deletions

View file

@ -118,10 +118,10 @@ var dsl = []byte(`
"in": ["$param.id", "$param.template_id", "$param.route", ":context"], "in": ["$param.id", "$param.template_id", "$param.route", ":context"],
"out": { "status": 200, "type": "application/json" } "out": { "status": 200, "type": "application/json" }
},{ },{
"path": "/:id/page/create/:template_id/*route", "path": "/:id/page/create/:template_id",
"method": "POST", "method": "POST",
"process": "sui.Page.Create", "process": "sui.Page.Create",
"in": ["$param.id", "$param.template_id", "$param.route", ":context"], "in": ["$param.id", "$param.template_id", ":payload", ":context"],
"out": { "status": 200, "type": "application/json" } "out": { "status": 200, "type": "application/json" }
},{ },{
"path": "/:id/page/exist/:template_id/*route", "path": "/:id/page/exist/:template_id/*route",

View file

@ -457,7 +457,7 @@ func PageSave(process *process.Process) interface{} {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()
} }
} else { } else {
page, err = tmpl.CreatePage(route) page, err = tmpl.CreateEmptyPage(route, nil)
if err != nil { if err != nil {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()
} }
@ -499,7 +499,7 @@ func PageSaveTemp(process *process.Process) interface{} {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()
} }
} else { } else {
page, err = tmpl.CreatePage(route) page, err = tmpl.CreateEmptyPage(route, nil)
if err != nil { if err != nil {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()
} }
@ -530,14 +530,23 @@ func PageCreate(process *process.Process) interface{} {
process.ValidateArgNums(3) process.ValidateArgNums(3)
sui := get(process) sui := get(process)
templateID := process.ArgsString(1) templateID := process.ArgsString(1)
route := route(process, 2) payload := process.ArgsMap(2, map[string]interface{}{})
tmpl, err := sui.GetTemplate(templateID) tmpl, err := sui.GetTemplate(templateID)
if err != nil { if err != nil {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()
} }
page, err := tmpl.CreatePage(route) route, ok := payload["route"].(string)
if !ok {
exception.New("the route is required", 400).Throw()
}
title := route
if v, ok := payload["title"].(string); ok {
title = v
}
setting := &core.PageSetting{Title: title}
page, err := tmpl.CreateEmptyPage(route, setting)
if err != nil { if err != nil {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()
} }
@ -548,7 +557,7 @@ func PageCreate(process *process.Process) interface{} {
source, err := getSource(process) source, err := getSource(process)
if err != nil { if err != nil {
exception.New(err.Error(), 500).Throw() return nil
} }
if source == nil { if source == nil {
@ -574,6 +583,10 @@ func PageRemove(process *process.Process) interface{} {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()
} }
if !tmpl.PageExist(route) {
exception.New("page does not exists!", 400).Throw()
}
err = tmpl.RemovePage(route) err = tmpl.RemovePage(route)
if err != nil { if err != nil {
exception.New(err.Error(), 500).Throw() exception.New(err.Error(), 500).Throw()

View file

@ -37,7 +37,7 @@ type ITemplate interface {
PageTree(route string) ([]*PageTreeNode, error) PageTree(route string) ([]*PageTreeNode, error)
Page(route string) (IPage, error) Page(route string) (IPage, error)
PageExist(route string) bool PageExist(route string) bool
CreatePage(route string) (IPage, error) CreateEmptyPage(route string, setting *PageSetting) (IPage, error)
RemovePage(route string) error RemovePage(route string) error
GetPageFromAsset(asset string) (IPage, error) GetPageFromAsset(asset string) (IPage, error)

View file

@ -172,7 +172,11 @@ type RequestSource struct {
Board *BoardSourceData `json:"board,omitempty"` Board *BoardSourceData `json:"board,omitempty"`
Mock *PageMock `json:"mock,omitempty"` Mock *PageMock `json:"mock,omitempty"`
Setting *PageSetting `json:"setting,omitempty"` Setting *PageSetting `json:"setting,omitempty"`
NeedToSave struct { NeedToSave ReqeustSourceNeedToSave `json:"needToSave,omitempty"`
}
// ReqeustSourceNeedToSave is the struct for the request
type ReqeustSourceNeedToSave struct {
Page bool `json:"page,omitempty"` Page bool `json:"page,omitempty"`
Style bool `json:"style,omitempty"` Style bool `json:"style,omitempty"`
Script bool `json:"script,omitempty"` Script bool `json:"script,omitempty"`
@ -181,7 +185,6 @@ type RequestSource struct {
Mock bool `json:"mock,omitempty"` Mock bool `json:"mock,omitempty"`
Setting bool `json:"setting,omitempty"` Setting bool `json:"setting,omitempty"`
Validate bool `json:"validate,omitempty"` Validate bool `json:"validate,omitempty"`
} `json:"needToSave,omitempty"`
} }
// ResponseEditorRender is the struct for the response // ResponseEditorRender is the struct for the response

View file

@ -186,6 +186,8 @@ func (tmpl *Template) RemovePage(route string) error {
path := filepath.Join(tmpl.Root, route) path := filepath.Join(tmpl.Root, route)
name := filepath.Base(path) + ".*" name := filepath.Base(path) + ".*"
name = strings.ReplaceAll(name, "[", "\\[")
name = strings.ReplaceAll(name, "]", "\\]")
err := tmpl.local.fs.Walk(path, func(root, file string, isdir bool) error { err := tmpl.local.fs.Walk(path, func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
@ -210,15 +212,15 @@ func (tmpl *Template) RemovePage(route string) error {
} }
// CreatePage create a new page // CreateEmptyPage create a new empty
func (tmpl *Template) CreatePage(route string) (core.IPage, error) { func (tmpl *Template) CreateEmptyPage(route string, setting *core.PageSetting) (core.IPage, error) {
if tmpl.PageExist(route) { if tmpl.PageExist(route) {
return nil, fmt.Errorf("Page %s already exist", route) return nil, fmt.Errorf("Page %s already exist", route)
} }
// Create the page directory // Create the page directory
name := tmpl.getPageBase(route) name := tmpl.getPageBase(route)
return &Page{ page := &Page{
tmpl: tmpl, tmpl: tmpl,
Page: &core.Page{ Page: &core.Page{
Route: route, Route: route,
@ -235,7 +237,22 @@ func (tmpl *Template) CreatePage(route string) (core.IPage, error) {
CONF: core.Source{File: fmt.Sprintf("%s.config", name)}, CONF: core.Source{File: fmt.Sprintf("%s.config", name)},
}, },
}, },
}, nil }
title := route
if setting != nil {
title = setting.Title
}
err := page.Save(&core.RequestSource{
Page: &core.SourceData{Source: fmt.Sprintf("<div>%s</div>", title), Language: "html"},
Setting: setting,
NeedToSave: core.ReqeustSourceNeedToSave{Page: true, Setting: true},
})
if err != nil {
return nil, err
}
return page, nil
} }
// Remove remove the page // Remove remove the page

View file

@ -474,7 +474,7 @@ func TestPageSave(t *testing.T) {
req := &core.RequestSource{UID: "19e09e7e-9e19-44c1-bbab-2a55c51c9df3"} req := &core.RequestSource{UID: "19e09e7e-9e19-44c1-bbab-2a55c51c9df3"}
jsoniter.Unmarshal([]byte(payload), &req) jsoniter.Unmarshal([]byte(payload), &req)
page, err := tmpl.CreatePage("/unit-test") page, err := tmpl.CreateEmptyPage("/unit-test", nil)
if err != nil { if err != nil {
t.Fatalf("Page error: %v", err) t.Fatalf("Page error: %v", err)
} }