package controller import ( "SciencesServer/app/api/admin/model" "SciencesServer/app/basic/controller" model2 "SciencesServer/app/common/model" "SciencesServer/config" "SciencesServer/serve/orm" "errors" "fmt" "time" "gorm.io/gorm" ) type Config struct{} type ConfigHandle func() *Config func (c *Config) Config(kind, page, pageSize int) (*controller.ReturnPages, error) { mSysConfig := model.NewSysConfig() where := []*model2.ModelWhereOrder{ &model2.ModelWhereOrder{Order: model2.NewOrder("kind", model2.OrderModeToAsc)}, } if kind > 0 { where = append(where, &model2.ModelWhereOrder{Where: model2.NewWhere("kind", kind)}) } out := make([]*model2.SysConfig, 0) var count int64 if err := model2.Pages(mSysConfig.SysConfig, &out, page, pageSize, &count, where...); err != nil { return nil, err } return &controller.ReturnPages{Data: out, Count: count}, nil } func (c *Config) Add(kind int, name, key string, value interface{}) error { mSysConfig := model.NewSysConfig() var count int64 err := model2.Count(mSysConfig.SysConfig, &count, model2.NewWhere("key", key)) if err != nil { return err } else if count > 0 { return errors.New("key已存在") } mSysConfig.Kind = model2.SysConfigKind(kind) mSysConfig.Name = name mSysConfig.Key = key mSysConfig.Value = fmt.Sprintf("%v", value) if err = model2.Create(mSysConfig.SysConfig); err != nil { return err } config.SystemConfig[key] = value return nil } func (c *Config) Form(params map[string]interface{}) error { if len(params) <= 0 { return nil } return orm.GetDB().Transaction(func(tx *gorm.DB) error { mSysConfig := model.NewSysConfig() now := time.Now() for k, v := range params { if _, has := config.SystemConfig[k]; !has { return errors.New("UnKnown Config Key :" + k) } if err := model2.UpdatesWhere(mSysConfig.SysConfig, map[string]interface{}{ "value": v, "updated_at": now, }, []*model2.ModelWhere{model2.NewWhere("key", k)}, tx); err != nil { return err } config.SystemConfig[k] = v } return nil }) } func NewConfig() ConfigHandle { return func() *Config { return &Config{} } }