Files
APIPark/module/dynamic-module/driver/driver.go
T
2024-08-12 21:38:09 +08:00

138 lines
2.3 KiB
Go

package driver
import "encoding/json"
type IDriver interface {
ID() string
Name() string
Title() string
Group() string
Front() string
Define() IDefine
}
type IDefine interface {
Profession() string
Skill() string
Drivers() []*Field
Fields(fields ...*Field) []*Field
Render() map[string]interface{}
Columns() []string
}
type Driver struct {
id string
name string
title string
group string
front string
define IDefine
}
func (d *Driver) ID() string {
return d.id
}
func (d *Driver) Name() string {
return d.name
}
func (d *Driver) Title() string {
return d.title
}
func (d *Driver) Group() string {
return d.group
}
func (d *Driver) Front() string {
return d.front
}
func (d *Driver) Define() IDefine {
return d.define
}
func NewDriver(cfg *PluginCfg) IDriver {
return &Driver{
id: cfg.Id,
name: cfg.Name,
title: cfg.Cname,
group: cfg.GroupId,
front: cfg.Front,
define: NewDefine(cfg.Define),
}
}
var defaultFields = []*Field{
{
Name: "updater",
Title: "更新者",
},
{
Name: "update_time",
Title: "更新时间",
},
}
type Define struct {
profession string
skill string
drivers []*Field
fields []*Field
columns []string
render map[string]interface{}
}
func (d *Define) Columns() []string {
return d.columns
}
func NewDefine(d *PluginDefine) *Define {
columns := make([]string, 0, len(d.Fields))
for _, field := range d.Fields {
columns = append(columns, field.Name)
}
render := make(map[string]interface{})
for k, v := range d.Render {
r := make(map[string]interface{})
err := json.Unmarshal([]byte(v), &r)
if err != nil {
continue
}
render[k] = r
}
return &Define{
profession: d.Profession,
skill: d.Skill,
drivers: d.Drivers,
fields: d.Fields,
render: render,
columns: columns,
}
}
func (d *Define) Profession() string {
return d.profession
}
func (d *Define) Skill() string {
return d.skill
}
func (d *Define) Drivers() []*Field {
return d.drivers
}
func (d *Define) Fields(fields ...*Field) []*Field {
fs := make([]*Field, 0, len(d.fields)+len(fields)+len(defaultFields))
fs = append(fs, d.fields...)
fs = append(fs, fields...)
fs = append(fs, defaultFields...)
return fs
}
func (d *Define) Render() map[string]interface{} {
return d.render
}