yao/table/api.go
2021-09-28 10:52:01 +08:00

130 lines
3 KiB
Go

package table
import (
"fmt"
"github.com/yaoapp/gou"
)
// loadAPIs 加载数据管理 API
func (table *Table) loadAPIs() {
if table.Bind.Model == "" {
return
}
defaults := getDefaultAPIs(table.Bind)
defaults["setting"] = apiDefaultSetting(table)
for name := range table.APIs {
if _, has := defaults[name]; !has {
delete(table.APIs, name)
continue
}
api := defaults[name]
api.Name = name
if table.APIs[name].Process == "" {
api.Process = table.APIs[name].Process
}
if table.APIs[name].Guard == "" {
api.Guard = table.APIs[name].Guard
}
if table.APIs[name].Default == nil {
api.Default = table.APIs[name].Default
}
defaults[name] = api
}
table.APIs = defaults
}
// getDefaultAPIs 读取数据模型绑定的APIs
func getDefaultAPIs(bind Bind) map[string]API {
name := bind.Model
model := gou.Select(name)
apis := map[string]API{
"search": apiSearchDefault(model, bind.Withs),
"find": apiFindDefault(model, bind.Withs),
"save": apiDefault(model, "save", "Save"),
"delete": apiDefault(model, "delete", "Delete"),
"insert": apiDefault(model, "insert", "Insert"),
"delete-in": apiDefault(model, "delete-in", "DeleteWhere"),
"delete-where": apiDefaultWhere(model, bind.Withs, "delete-where", "DeleteWhere"),
"update-in": apiDefault(model, "update-in", "UpdateWhere"),
"update-where": apiDefaultWhere(model, bind.Withs, "update-where", "UpdateWhere"),
}
return apis
}
// apiSearchDefault search 接口默认值
func apiSearchDefault(model *gou.Model, withs map[string]gou.With) API {
query := gou.QueryParam{}
if model.MetaData.Option.Timestamps {
query.Orders = []gou.QueryOrder{
{Column: "created_at", Option: "desc"},
}
}
if withs != nil {
query.Withs = withs
}
return API{
Name: "search",
Guard: "bearer-jwt",
Process: fmt.Sprintf("models.%s.Paginate", model.Name),
Default: []interface{}{query, 1, 20},
}
}
// apiFindDefault find 接口默认值
func apiFindDefault(model *gou.Model, withs map[string]gou.With) API {
query := gou.QueryParam{}
if withs != nil {
query.Withs = withs
}
return API{
Name: "find",
Guard: "bearer-jwt",
Process: fmt.Sprintf("models.%s.Find", model.Name),
Default: []interface{}{nil, query},
}
}
// apiFindDefault 接口默认值
func apiDefault(model *gou.Model, name string, process string) API {
return API{
Name: name,
Guard: "bearer-jwt",
Process: fmt.Sprintf("models.%s.%s", model.Name, process),
}
}
// apiFindDefault 接口默认值
func apiDefaultWhere(model *gou.Model, withs map[string]gou.With, name string, process string) API {
query := gou.QueryParam{}
if withs != nil {
query.Withs = withs
}
return API{
Name: name,
Guard: "bearer-jwt",
Process: fmt.Sprintf("models.%s.%s", model.Name, process),
Default: []interface{}{query},
}
}
// apiDefaultSetting 数据表格配置默认值
func apiDefaultSetting(table *Table) API {
return API{
Name: "setting",
Guard: "bearer-jwt",
Process: fmt.Sprintf("tables.%s.Setting", table.Table),
}
}