mirror of
https://github.com/cuigh/swirl
synced 2024-12-30 15:53:24 +00:00
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
|
||
|
"github.com/cuigh/auxo/data"
|
||
|
"github.com/cuigh/auxo/net/web"
|
||
|
"github.com/cuigh/swirl/biz"
|
||
|
)
|
||
|
|
||
|
// SettingHandler encapsulates setting related handlers.
|
||
|
type SettingHandler struct {
|
||
|
Load web.HandlerFunc `path:"/load" auth:"setting.view" desc:"load setting"`
|
||
|
Save web.HandlerFunc `path:"/save" method:"post" auth:"setting.edit" desc:"save setting"`
|
||
|
}
|
||
|
|
||
|
// NewSetting creates an instance of SettingHandler
|
||
|
func NewSetting(b biz.SettingBiz) *SettingHandler {
|
||
|
return &SettingHandler{
|
||
|
Load: settingLoad(b),
|
||
|
Save: settingSave(b),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func settingLoad(b biz.SettingBiz) web.HandlerFunc {
|
||
|
return func(ctx web.Context) error {
|
||
|
options, err := b.Load()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return success(ctx, options)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func settingSave(b biz.SettingBiz) web.HandlerFunc {
|
||
|
type Args struct {
|
||
|
ID string `json:"id"`
|
||
|
Options json.RawMessage `json:"options"`
|
||
|
}
|
||
|
|
||
|
return func(ctx web.Context) (err error) {
|
||
|
args := &Args{}
|
||
|
err = ctx.Bind(args)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
options := data.Map{}
|
||
|
d := json.NewDecoder(bytes.NewBuffer(args.Options))
|
||
|
d.UseNumber()
|
||
|
if err = d.Decode(&options); err == nil {
|
||
|
err = b.Save(args.ID, options, ctx.User())
|
||
|
}
|
||
|
return ajax(ctx, err)
|
||
|
}
|
||
|
}
|