From 0b1de850330a098da7ccced58b31066680e535e8 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 28 Sep 2023 11:35:17 +0800 Subject: [PATCH] [add] template locale, theme api --- sui/api/api.go | 22 +++++++++++++++++---- sui/api/process.go | 32 ++++++++++++++++++++++++++++-- sui/api/process_test.go | 43 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 6 deletions(-) diff --git a/sui/api/api.go b/sui/api/api.go index bd119dd8..775ff1df 100644 --- a/sui/api/api.go +++ b/sui/api/api.go @@ -11,16 +11,30 @@ var dsl = []byte(` "group": "__yao/sui/v1", "paths": [ { + "path": "/:id/template", + "method": "GET", + "process": "sui.Template.Get", + "in": ["$param.id"], + "out": { "status": 200, "type": "application/json" } + },{ "path": "/:id/template/:template_id", "method": "GET", "process": "sui.Template.Find", "in": ["$param.id", "$param.template_id"], "out": { "status": 200, "type": "application/json" } - },{ - "path": "/:id/template", + }, + + { + "path": "/:id/template/:template_id/locale", "method": "GET", - "process": "sui.Template.Get", - "in": ["$param.id"], + "process": "sui.Template.Locale.Get", + "in": ["$param.id", "$param.template_id"], + "out": { "status": 200, "type": "application/json" } + },{ + "path": "/:id/template/:template_id/theme", + "method": "GET", + "process": "sui.Template.Theme.Get", + "in": ["$param.id", "$param.template_id"], "out": { "status": 200, "type": "application/json" } }, diff --git a/sui/api/process.go b/sui/api/process.go index 430bf719..5a9ea0bb 100644 --- a/sui/api/process.go +++ b/sui/api/process.go @@ -8,8 +8,10 @@ import ( func init() { process.RegisterGroup("sui", map[string]process.Handler{ - "template.get": TemplateGet, - "template.find": TemplateFind, + "template.get": TemplateGet, + "template.find": TemplateFind, + "template.locale.get": TemplateLocaleGet, + "template.theme.get": TemplateThemeGet, "editor.render": EditorRender, "editor.source": EditorSource, @@ -42,6 +44,32 @@ func TemplateFind(process *process.Process) interface{} { return template } +// TemplateLocaleGet handle the find Template request +func TemplateLocaleGet(process *process.Process) interface{} { + process.ValidateArgNums(2) + + sui := get(process) + template, err := sui.GetTemplate(process.ArgsString(1)) + if err != nil { + exception.New(err.Error(), 500).Throw() + } + + return template.Locales() +} + +// TemplateThemeGet handle the find Template request +func TemplateThemeGet(process *process.Process) interface{} { + process.ValidateArgNums(2) + + sui := get(process) + template, err := sui.GetTemplate(process.ArgsString(1)) + if err != nil { + exception.New(err.Error(), 500).Throw() + } + + return template.Themes() +} + // EditorRender handle the render page request func EditorRender(process *process.Process) interface{} { process.ValidateArgNums(3) diff --git a/sui/api/process_test.go b/sui/api/process_test.go index d2359885..1efcf8da 100644 --- a/sui/api/process_test.go +++ b/sui/api/process_test.go @@ -48,6 +48,49 @@ func TestTemplateFind(t *testing.T) { assert.Equal(t, "tech-blue", res.(*local.Template).ID) } +func TestTemplateLocaleGet(t *testing.T) { + load(t) + defer clean() + + // test demo + p, err := process.Of("sui.template.locale.get", "demo", "tech-blue") + if err != nil { + t.Fatal(err) + } + + res, err := p.Exec() + if err != nil { + t.Fatal(err) + } + + assert.IsType(t, []core.SelectOption{}, res) + assert.Equal(t, 3, len(res.([]core.SelectOption))) + assert.Equal(t, "ar", res.([]core.SelectOption)[0].Value) + assert.Equal(t, "zh-cn", res.([]core.SelectOption)[1].Value) + assert.Equal(t, "zh-tw", res.([]core.SelectOption)[2].Value) +} + +func TestTemplateThemeGet(t *testing.T) { + load(t) + defer clean() + + // test demo + p, err := process.Of("sui.template.theme.get", "demo", "tech-blue") + if err != nil { + t.Fatal(err) + } + + res, err := p.Exec() + if err != nil { + t.Fatal(err) + } + + assert.IsType(t, []core.SelectOption{}, res) + assert.Equal(t, 2, len(res.([]core.SelectOption))) + assert.Equal(t, "dark", res.([]core.SelectOption)[0].Value) + assert.Equal(t, "light", res.([]core.SelectOption)[1].Value) +} + func TestEditorRender(t *testing.T) { load(t) defer clean()