Skip to content

Commit

Permalink
Add context for data model
Browse files Browse the repository at this point in the history
  • Loading branch information
cg33 committed Feb 5, 2020
1 parent de93fb3 commit e04f3cf
Show file tree
Hide file tree
Showing 15 changed files with 92 additions and 40 deletions.
3 changes: 2 additions & 1 deletion adm/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,12 +402,13 @@ func generateFile(table string, conn db.Connection, fieldField, typeField, packa
content := `package ` + packageName + `
import (
"github.com/GoAdminGroup/go-admin/context"
"github.com/GoAdminGroup/go-admin/modules/db"
"github.com/GoAdminGroup/go-admin/plugins/admin/modules/table"
"github.com/GoAdminGroup/go-admin/template/types/form"
)
func Get` + strings.Title(tableCamel) + `Table() table.Table {
func Get` + strings.Title(tableCamel) + `Table(ctx *context.Context) table.Table {
` + tableCamel + `Table := ` + newTable + `
Expand Down
8 changes: 7 additions & 1 deletion context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,9 @@ func (g *RouterGroup) AppendReqAndResp(url, method string, handler []Handler) {
Method: method,
})

g.app.tree.addPath(stringToArr(join(g.Prefix, slash(url))), method, append(g.Middlewares, handler...))
var h = make([]Handler, len(g.Middlewares))
copy(h, g.Middlewares)
g.app.tree.addPath(stringToArr(join(g.Prefix, slash(url))), method, append(h, handler...))
}

// POST is a shortcut for app.AppendReqAndResp(url, "post", handler).
Expand Down Expand Up @@ -399,6 +401,10 @@ func (g *RouterGroup) Group(prefix string, middleware ...Handler) *RouterGroup {
}
}

func (g *RouterGroup) Print() {
g.app.tree.printLeafChildren()
}

// slash fix the path which has wrong format problem.
//
// "" => "/"
Expand Down
55 changes: 43 additions & 12 deletions context/context_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package context

import (
"fmt"
"github.com/magiconair/properties/assert"
"testing"
)
Expand All @@ -24,17 +25,47 @@ func TestJoin(t *testing.T) {

func TestTree(t *testing.T) {
tree := tree()
tree.addPath(stringToArr("/adm"), "GET", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admi"), "GET", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admin"), "GET", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admin/info/menu"), "GET", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admin/info/me"), "GET", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admin/info/mefr"), "GET", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admin/info/user"), "POST", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admin/menu/new"), "POST", []Handler{func(ctx *Context) {}})
tree.addPath(stringToArr("/admin/menu/new"), "GET", []Handler{func(ctx *Context) {}})
assert.Equal(t, tree.findPath(stringToArr("/admin/menu/new"), "GET") != nil, true)
assert.Equal(t, tree.findPath(stringToArr("/admin/menu/new"), "POST") != nil, true)
assert.Equal(t, tree.findPath(stringToArr("/admin/me/new"), "POST") == nil, true)
tree.addPath(stringToArr("/adm"), "GET", []Handler{func(ctx *Context) { fmt.Println(1) }})
tree.addPath(stringToArr("/admi"), "GET", []Handler{func(ctx *Context) { fmt.Println(1) }})
tree.addPath(stringToArr("/admin"), "GET", []Handler{func(ctx *Context) { fmt.Println(1) }})
tree.addPath(stringToArr("/admin/menu/new"), "POST", []Handler{func(ctx *Context) { fmt.Println(1) }})
tree.addPath(stringToArr("/admin/menu/new"), "GET", []Handler{func(ctx *Context) { fmt.Println(1) }})
tree.addPath(stringToArr("/admin/info/:__prefix"), "GET", []Handler{
func(ctx *Context) { fmt.Println("auth") },
func(ctx *Context) { fmt.Println("init") },
func(ctx *Context) { fmt.Println("info") },
})
tree.addPath(stringToArr("/admin/info/:__prefix/detail"), "GET", []Handler{
func(ctx *Context) { fmt.Println("auth") },
func(ctx *Context) { fmt.Println("detail") },
})

fmt.Println("/admin/menu/new", "GET")
h := tree.findPath(stringToArr("/admin/menu/new"), "GET")
assert.Equal(t, h != nil, true)
printHandler(h)
fmt.Println("/admin/menu/new", "POST")
h = tree.findPath(stringToArr("/admin/menu/new"), "POST")
assert.Equal(t, h != nil, true)
printHandler(h)
fmt.Println("/admin/me/new", "POST")
h = tree.findPath(stringToArr("/admin/me/new"), "POST")
assert.Equal(t, h == nil, true)
printHandler(h)
fmt.Println("/admin/info/user", "GET")
h = tree.findPath(stringToArr("/admin/info/user"), "GET")
assert.Equal(t, h != nil, true)
printHandler(h)
fmt.Println("/admin/info/user/detail", "GET")
h = tree.findPath(stringToArr("/admin/info/user/detail"), "GET")
assert.Equal(t, h != nil, true)
printHandler(h)
fmt.Println("=========== printChildren ===========")
tree.printChildren()
}

func printHandler(h []Handler) {
for _, value := range h {
value(&Context{})
}
}
12 changes: 11 additions & 1 deletion context/trie.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,12 @@ func (n *node) findPath(paths []string, method string) []Handler {
if methodIndex == -1 {
return nil
}

return child.handle[methodIndex]
}

func (n *node) print() {
fmt.Println(n.value)
fmt.Println(n)
}

func (n *node) printChildren() {
Expand All @@ -95,6 +96,15 @@ func (n *node) printChildren() {
}
}

func (n *node) printLeafChildren() {
if len(n.handle) > 0 {
n.print()
}
for _, child := range n.children {
child.printLeafChildren()
}
}

func stringToArr(path string) []string {
var (
paths = make([]string, 0)
Expand Down
3 changes: 2 additions & 1 deletion examples/datamodel/authors.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package datamodel

import (
"github.com/GoAdminGroup/go-admin/context"
"github.com/GoAdminGroup/go-admin/modules/db"
"github.com/GoAdminGroup/go-admin/plugins/admin/modules/table"
"github.com/GoAdminGroup/go-admin/template/types/form"
)

// GetAuthorsTable return the model of table author.
func GetAuthorsTable() (authorsTable table.Table) {
func GetAuthorsTable(ctx *context.Context) (authorsTable table.Table) {

authorsTable = table.NewDefaultTable(table.DefaultConfig())

Expand Down
3 changes: 2 additions & 1 deletion examples/datamodel/posts.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package datamodel

import (
"github.com/GoAdminGroup/go-admin/context"
"github.com/GoAdminGroup/go-admin/modules/db"
"github.com/GoAdminGroup/go-admin/plugins/admin/modules/table"
"github.com/GoAdminGroup/go-admin/template"
Expand All @@ -10,7 +11,7 @@ import (
)

// GetPostsTable return the model of table posts.
func GetPostsTable() (postsTable table.Table) {
func GetPostsTable(ctx *context.Context) (postsTable table.Table) {

postsTable = table.NewDefaultTable(table.DefaultConfig())

Expand Down
2 changes: 1 addition & 1 deletion examples/datamodel/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
)

// GetUserTable return the model of table user.
func GetUserTable() (userTable table.Table) {
func GetUserTable(ctx *context.Context) (userTable table.Table) {

userTable = table.NewDefaultTable(table.Config{
Driver: db.DriverMysql,
Expand Down
1 change: 0 additions & 1 deletion plugins/admin/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ func (admin *Admin) InitPlugin(services service.List) {
})
table.SetServices(services)
table.SetGenerators(admin.tableCfg)
table.InitTableList()

controller.SetConfig(cfg)
controller.SetServices(services)
Expand Down
2 changes: 1 addition & 1 deletion plugins/admin/controller/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func ShowForm(ctx *context.Context) {

func showForm(ctx *context.Context, alert template2.HTML, prefix string, id string, url, infoUrl string, editUrl string) {

table.RefreshTableList()
table.RefreshTableList(ctx)
panel := table.Get(prefix)

formData, groupFormData, groupHeaders, title, description, err := panel.GetDataWithId(id)
Expand Down
8 changes: 4 additions & 4 deletions plugins/admin/controller/menu.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ $('.icon').iconpicker({placement: 'bottomLeft'});
// DeleteMenu delete the menu of given id.
func DeleteMenu(ctx *context.Context) {
models.MenuWithId(guard.GetMenuDeleteParam(ctx).Id).SetConn(db.GetConnection(services)).Delete()
table.RefreshTableList()
table.RefreshTableList(ctx)
response.Ok(ctx)
}

Expand All @@ -124,7 +124,7 @@ func EditMenu(ctx *context.Context) {
for _, roleId := range param.Roles {
menuModel.AddRole(roleId)
}
table.RefreshTableList()
table.RefreshTableList(ctx)

menuModel.Update(param.Title, param.Icon, param.Uri, param.Header, param.ParentId)

Expand Down Expand Up @@ -155,7 +155,7 @@ func NewMenu(ctx *context.Context) {
}

menu.GetGlobalMenu(user, conn).AddMaxOrder()
table.RefreshTableList()
table.RefreshTableList(ctx)

getMenuInfoPanel(ctx, "")
ctx.AddHeader("Content-Type", "text/html; charset=utf-8")
Expand All @@ -176,7 +176,7 @@ func MenuOrder(ctx *context.Context) {
func getMenuInfoPanel(ctx *context.Context, alert template2.HTML) {
user := auth.Auth(ctx)

table.RefreshTableList()
table.RefreshTableList(ctx)

editUrl := config.Url("/menu/edit/show")
deleteUrl := config.Url("/menu/delete")
Expand Down
2 changes: 1 addition & 1 deletion plugins/admin/controller/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func showNewForm(ctx *context.Context, alert template2.HTML, prefix string, url,

user := auth.Auth(ctx)

table.RefreshTableList()
table.RefreshTableList(ctx)
panel := table.Get(prefix)

formList, groupFormList, groupHeaders := table.GetNewFormList(panel.GetForm().TabHeaders, panel.GetForm().TabGroups,
Expand Down
1 change: 0 additions & 1 deletion plugins/admin/controller/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ func ShowInfo(ctx *context.Context) {
func showTable(ctx *context.Context, prefix, path string, params parameter.Parameters,
exportUrl, newUrl, deleteUrl, infoUrl, editUrl, updateUrl, detailUrl string) *bytes.Buffer {

table.InitTableList()
panel := table.Get(prefix)

panelInfo, err := panel.GetData(path, params, false)
Expand Down
13 changes: 7 additions & 6 deletions plugins/admin/modules/table/generators.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"database/sql"
"errors"
"fmt"
"github.com/GoAdminGroup/go-admin/context"
"github.com/GoAdminGroup/go-admin/modules/collection"
"github.com/GoAdminGroup/go-admin/modules/config"
"github.com/GoAdminGroup/go-admin/modules/db"
Expand All @@ -20,7 +21,7 @@ import (
"time"
)

func GetManagerTable() (ManagerTable Table) {
func GetManagerTable(ctx *context.Context) (ManagerTable Table) {
ManagerTable = NewDefaultTable(DefaultConfigWithDriver(config.Get().Databases.GetDefault().Driver))

info := ManagerTable.GetInfo().AddXssJsFilter().HideFilterArea()
Expand Down Expand Up @@ -287,7 +288,7 @@ func GetManagerTable() (ManagerTable Table) {
return
}

func GetNormalManagerTable() (ManagerTable Table) {
func GetNormalManagerTable(ctx *context.Context) (ManagerTable Table) {
ManagerTable = NewDefaultTable(DefaultConfigWithDriver(config.Get().Databases.GetDefault().Driver))

info := ManagerTable.GetInfo().AddXssJsFilter().HideFilterArea()
Expand Down Expand Up @@ -453,7 +454,7 @@ func GetNormalManagerTable() (ManagerTable Table) {
return
}

func GetPermissionTable() (PermissionTable Table) {
func GetPermissionTable(ctx *context.Context) (PermissionTable Table) {
PermissionTable = NewDefaultTable(DefaultConfigWithDriver(config.Get().Databases.GetDefault().Driver))

info := PermissionTable.GetInfo().AddXssJsFilter().HideFilterArea()
Expand Down Expand Up @@ -577,7 +578,7 @@ func GetPermissionTable() (PermissionTable Table) {
return
}

func GetRolesTable() (RolesTable Table) {
func GetRolesTable(ctx *context.Context) (RolesTable Table) {
RolesTable = NewDefaultTable(DefaultConfigWithDriver(config.Get().Databases.GetDefault().Driver))

info := RolesTable.GetInfo().AddXssJsFilter().HideFilterArea()
Expand Down Expand Up @@ -711,7 +712,7 @@ func GetRolesTable() (RolesTable Table) {
return
}

func GetOpTable() (OpTable Table) {
func GetOpTable(ctx *context.Context) (OpTable Table) {
OpTable = NewDefaultTable(Config{
Driver: config.Get().Databases.GetDefault().Driver,
CanAdd: false,
Expand Down Expand Up @@ -758,7 +759,7 @@ func GetOpTable() (OpTable Table) {
return
}

func GetMenuTable() (MenuTable Table) {
func GetMenuTable(ctx *context.Context) (MenuTable Table) {
MenuTable = NewDefaultTable(DefaultConfigWithDriver(config.Get().Databases.GetDefault().Driver))

info := MenuTable.GetInfo().AddXssJsFilter().HideFilterArea()
Expand Down
12 changes: 6 additions & 6 deletions plugins/admin/modules/table/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ import (
"time"
)

type Generator func() Table
type Generator func(ctx *context.Context) Table

type GeneratorList map[string]Generator

func (g GeneratorList) InjectRoutes(app *context.App) {
for _, gen := range g {
table := gen()
table := gen(&context.Context{})
for _, cb := range table.GetInfo().Callbacks {
app.AppendReqAndResp(cb.Path, cb.Method, cb.Handlers)
}
Expand Down Expand Up @@ -72,16 +72,16 @@ func Get(key string) Table {
return tableList[key]
}

func InitTableList() {
func InitTableList(ctx *context.Context) {
for prefix, generator := range generators {
tableList[prefix] = generator()
tableList[prefix] = generator(ctx)
}
}

// RefreshTableList refresh the table list when the table relationship changed.
func RefreshTableList() {
func RefreshTableList(ctx *context.Context) {
for k, v := range generators {
tableList[k] = v()
tableList[k] = v(ctx)
}
}

Expand Down
7 changes: 5 additions & 2 deletions plugins/admin/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/GoAdminGroup/go-admin/modules/service"
"github.com/GoAdminGroup/go-admin/plugins/admin/controller"
"github.com/GoAdminGroup/go-admin/plugins/admin/modules/guard"
"github.com/GoAdminGroup/go-admin/plugins/admin/modules/table"
"github.com/GoAdminGroup/go-admin/template"
)

Expand All @@ -33,7 +34,9 @@ func InitRouter(prefix string, srv service.List) *context.App {
route.GET("/assets"+path, controller.Assets)
}

authRoute := route.Group("/", auth.Middleware(db.GetConnection(srv)))
authRoute := route.Group("/", auth.Middleware(db.GetConnection(srv)), func(ctx *context.Context) {
table.InitTableList(ctx)
})

// auth
authRoute.GET("/logout", controller.Logout)
Expand All @@ -50,14 +53,14 @@ func InitRouter(prefix string, srv service.List) *context.App {
authRoute.GET("/menu/new", controller.ShowNewMenu)

// add delete modify query
authRoute.GET("/info/:__prefix/detail", controller.ShowDetail)
authRoute.GET("/info/:__prefix/edit", guard.ShowForm(conn), controller.ShowForm)
authRoute.GET("/info/:__prefix/new", guard.ShowNewForm(conn), controller.ShowNewForm)
authRoute.POST("/edit/:__prefix", guard.EditForm(srv), controller.EditForm)
authRoute.POST("/new/:__prefix", guard.NewForm(srv), controller.NewForm)
authRoute.POST("/delete/:__prefix", guard.Delete(conn), controller.Delete)
authRoute.POST("/export/:__prefix", guard.Export(conn), controller.Export)
authRoute.GET("/info/:__prefix", controller.ShowInfo)
authRoute.GET("/info/:__prefix/detail", controller.ShowDetail)

authRoute.POST("/update/:__prefix", guard.Update, controller.Update)

Expand Down

0 comments on commit e04f3cf

Please sign in to comment.