From b81e4f20030d84e8a8c8a4322e82badb73119a23 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 11 Dec 2023 23:54:42 +0800 Subject: [PATCH] [add] builder create page api --- sui/api/api.go | 4 ++-- sui/api/process.go | 19 +++++++++++---- sui/core/interfaces.go | 2 +- sui/core/types.go | 41 ++++++++++++++++++--------------- sui/storages/local/page.go | 23 ++++++++++++++---- sui/storages/local/page_test.go | 2 +- 6 files changed, 59 insertions(+), 32 deletions(-) diff --git a/sui/api/api.go b/sui/api/api.go index b4a2f99f..73d2bfce 100644 --- a/sui/api/api.go +++ b/sui/api/api.go @@ -118,10 +118,10 @@ var dsl = []byte(` "in": ["$param.id", "$param.template_id", "$param.route", ":context"], "out": { "status": 200, "type": "application/json" } },{ - "path": "/:id/page/create/:template_id/*route", + "path": "/:id/page/create/:template_id", "method": "POST", "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" } },{ "path": "/:id/page/exist/:template_id/*route", diff --git a/sui/api/process.go b/sui/api/process.go index 6f56a723..db435dcc 100644 --- a/sui/api/process.go +++ b/sui/api/process.go @@ -457,7 +457,7 @@ func PageSave(process *process.Process) interface{} { exception.New(err.Error(), 500).Throw() } } else { - page, err = tmpl.CreatePage(route) + page, err = tmpl.CreateEmptyPage(route, nil) if err != nil { exception.New(err.Error(), 500).Throw() } @@ -499,7 +499,7 @@ func PageSaveTemp(process *process.Process) interface{} { exception.New(err.Error(), 500).Throw() } } else { - page, err = tmpl.CreatePage(route) + page, err = tmpl.CreateEmptyPage(route, nil) if err != nil { exception.New(err.Error(), 500).Throw() } @@ -530,14 +530,23 @@ func PageCreate(process *process.Process) interface{} { process.ValidateArgNums(3) sui := get(process) templateID := process.ArgsString(1) - route := route(process, 2) + payload := process.ArgsMap(2, map[string]interface{}{}) tmpl, err := sui.GetTemplate(templateID) if err != nil { 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 { exception.New(err.Error(), 500).Throw() } @@ -548,7 +557,7 @@ func PageCreate(process *process.Process) interface{} { source, err := getSource(process) if err != nil { - exception.New(err.Error(), 500).Throw() + return nil } if source == nil { diff --git a/sui/core/interfaces.go b/sui/core/interfaces.go index 183dd64d..b7ddaf8f 100644 --- a/sui/core/interfaces.go +++ b/sui/core/interfaces.go @@ -37,7 +37,7 @@ type ITemplate interface { PageTree(route string) ([]*PageTreeNode, error) Page(route string) (IPage, error) PageExist(route string) bool - CreatePage(route string) (IPage, error) + CreateEmptyPage(route string, setting *PageSetting) (IPage, error) RemovePage(route string) error GetPageFromAsset(asset string) (IPage, error) diff --git a/sui/core/types.go b/sui/core/types.go index 480f47a9..1b698a8e 100644 --- a/sui/core/types.go +++ b/sui/core/types.go @@ -163,25 +163,28 @@ type Request struct { // RequestSource is the struct for the request type RequestSource struct { - UID string `json:"uid"` - User string `json:"user,omitempty"` - Page *SourceData `json:"page,omitempty"` - Style *SourceData `json:"style,omitempty"` - Script *SourceData `json:"script,omitempty"` - Data *SourceData `json:"data,omitempty"` - Board *BoardSourceData `json:"board,omitempty"` - Mock *PageMock `json:"mock,omitempty"` - Setting *PageSetting `json:"setting,omitempty"` - NeedToSave struct { - Page bool `json:"page,omitempty"` - Style bool `json:"style,omitempty"` - Script bool `json:"script,omitempty"` - Data bool `json:"data,omitempty"` - Board bool `json:"board,omitempty"` - Mock bool `json:"mock,omitempty"` - Setting bool `json:"setting,omitempty"` - Validate bool `json:"validate,omitempty"` - } `json:"needToSave,omitempty"` + UID string `json:"uid"` + User string `json:"user,omitempty"` + Page *SourceData `json:"page,omitempty"` + Style *SourceData `json:"style,omitempty"` + Script *SourceData `json:"script,omitempty"` + Data *SourceData `json:"data,omitempty"` + Board *BoardSourceData `json:"board,omitempty"` + Mock *PageMock `json:"mock,omitempty"` + Setting *PageSetting `json:"setting,omitempty"` + NeedToSave ReqeustSourceNeedToSave `json:"needToSave,omitempty"` +} + +// ReqeustSourceNeedToSave is the struct for the request +type ReqeustSourceNeedToSave struct { + Page bool `json:"page,omitempty"` + Style bool `json:"style,omitempty"` + Script bool `json:"script,omitempty"` + Data bool `json:"data,omitempty"` + Board bool `json:"board,omitempty"` + Mock bool `json:"mock,omitempty"` + Setting bool `json:"setting,omitempty"` + Validate bool `json:"validate,omitempty"` } // ResponseEditorRender is the struct for the response diff --git a/sui/storages/local/page.go b/sui/storages/local/page.go index 11b02b68..390cfbdc 100644 --- a/sui/storages/local/page.go +++ b/sui/storages/local/page.go @@ -210,15 +210,15 @@ func (tmpl *Template) RemovePage(route string) error { } -// CreatePage create a new page -func (tmpl *Template) CreatePage(route string) (core.IPage, error) { +// CreateEmptyPage create a new empty +func (tmpl *Template) CreateEmptyPage(route string, setting *core.PageSetting) (core.IPage, error) { if tmpl.PageExist(route) { return nil, fmt.Errorf("Page %s already exist", route) } // Create the page directory name := tmpl.getPageBase(route) - return &Page{ + page := &Page{ tmpl: tmpl, Page: &core.Page{ Route: route, @@ -235,7 +235,22 @@ func (tmpl *Template) CreatePage(route string) (core.IPage, error) { 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("
%s
", 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 diff --git a/sui/storages/local/page_test.go b/sui/storages/local/page_test.go index 9c82706a..2c3f487a 100644 --- a/sui/storages/local/page_test.go +++ b/sui/storages/local/page_test.go @@ -474,7 +474,7 @@ func TestPageSave(t *testing.T) { req := &core.RequestSource{UID: "19e09e7e-9e19-44c1-bbab-2a55c51c9df3"} jsoniter.Unmarshal([]byte(payload), &req) - page, err := tmpl.CreatePage("/unit-test") + page, err := tmpl.CreateEmptyPage("/unit-test", nil) if err != nil { t.Fatalf("Page error: %v", err) }