diff --git a/app/admin/apis/system/settings.go b/app/admin/apis/system/settings.go index 176cfb60..7972e286 100644 --- a/app/admin/apis/system/settings.go +++ b/app/admin/apis/system/settings.go @@ -1,35 +1,55 @@ package system import ( - "errors" "fmt" + "go-admin/app/admin/service" + "go-admin/app/admin/service/dto" + "go-admin/common/apis" + "go-admin/common/log" + "net/http" "strings" "github.com/gin-gonic/gin" "go-admin/app/admin/models" "go-admin/tools" - "go-admin/tools/app" ) +type SysSetting struct { + apis.Api +} + // @Summary 查询系统信息 // @Description 获取JSON // @Tags 系统信息 // @Success 200 {string} string "{"code": 200, "message": "添加成功"}" // @Success 200 {string} string "{"code": -1, "message": "添加失败"}" // @Router /api/v1/setting [get] -func GetSetting(c *gin.Context) { - var s models.SysSetting - r, e := s.Get() +func (e *SysSetting) GetSetting(c *gin.Context) { + msgID := tools.GenerateMsgIDFromContext(c) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) + return + } - if r.Logo != "" { - if !strings.HasPrefix(r.Logo, "http") { - r.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, r.Logo) + sysSettingService := service.SysSetting{} + sysSettingService.MsgID=msgID + sysSettingService.Orm=db + var model = models.SysSetting{} + err = sysSettingService.GetSysSetting(&model) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "查询失败") + return + } + + if model.Logo != "" { + if !strings.HasPrefix(model.Logo, "http") { + model.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, model.Logo) } } - tools.HasError(e, "查询失败", 500) - app.OK(c, r, "查询成功") + e.OK(c, model, "查询成功") } // @Summary 更新或提交系统信息 @@ -39,30 +59,41 @@ func GetSetting(c *gin.Context) { // @Success 200 {string} string "{"code": 200, "message": "添加成功"}" // @Success 200 {string} string "{"code": -1, "message": "添加失败"}" // @Router /api/v1/system/setting [post] -func CreateSetting(c *gin.Context) { - var s models.ResponseSystemConfig - if err := c.ShouldBind(&s); err != nil { - app.Error(c, 200, errors.New("缺少必要参数"), "") +func (e *SysSetting) CreateOrUpdateSetting(c *gin.Context) { + control := new(dto.SysSettingControl) + msgID := tools.GenerateMsgIDFromContext(c) + db, err := tools.GetOrm(c) + if err != nil { + log.Error(err) return } - var sModel models.SysSetting - sModel.Logo = s.Logo - sModel.Name = s.Name - sModel.SettingsId = s.SettingsId - - a, e := sModel.Update() - if e != nil { - app.Error(c, 200, e, "") + //更新操作 + err = control.Bind(c) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "参数验证失败") + return + } + object, err := control.Generate() + if err != nil { + e.Error(c, http.StatusInternalServerError, err, "模型生成失败") return } - if a.Logo != "" { - if !strings.HasPrefix(a.Logo, "http") { - a.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, a.Logo) + sysSettingService := service.SysSetting{} + sysSettingService.MsgID=msgID + sysSettingService.Orm=db + err = sysSettingService.UpdateSysSetting(object) + if err != nil { + e.Error(c, http.StatusUnprocessableEntity, err, "更新失败") + return + } + + + if object.Logo != "" { + if !strings.HasPrefix(object.Logo, "http") { + object.Logo = fmt.Sprintf("http://%s/%s", c.Request.Host, object.Logo) } } - - app.OK(c, a, "提交成功") - + e.OK(c, object, "提交成功") } diff --git a/app/admin/service/dto/sys_setting.go b/app/admin/service/dto/sys_setting.go new file mode 100644 index 00000000..272b4cd1 --- /dev/null +++ b/app/admin/service/dto/sys_setting.go @@ -0,0 +1,87 @@ +package dto + +import ( + "encoding/json" + "github.com/gin-gonic/gin" + "go-admin/app/admin/models" + "go-admin/common/log" + "go-admin/tools" +) + +// SysConfigControl 增、改使用的结构体 +type SysSettingControl struct { + SettingsId int `json:"settings_id" binding:"required"` // 头像 + Name string `json:"name" binding:"required"` // 名称 + Logo string `json:"logo" binding:"required"` // 头像 +} + +// Bind 映射上下文中的结构体数据 +func (s *SysSettingControl) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + + err := ctx.ShouldBind(s) + if err != nil { + log.Errorf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + return err + } + + err = ctx.ShouldBindUri(s) + if err != nil { + log.Errorf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error()) + return err + } + var jsonStr []byte + jsonStr, err = json.Marshal(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + ctx.Set("body", string(jsonStr)) + return err +} + +// Generate 结构体数据转化 从 SysConfigControl 至 system.SysConfig 对应的模型 +func (s *SysSettingControl) Generate() (*models.SysSetting, error) { + return &models.SysSetting{ + SettingsId: s.SettingsId, + Name: s.Name, + Logo: s.Logo, + }, nil +} + +// GetId 获取数据对应的ID +func (s *SysSettingControl) GetId() interface{} { + return s.SettingsId +} + +// SysConfigById 获取单个或者删除的结构体 +type SysSettingById struct { + Id int `uri:"id"` + Ids []int `json:"ids"` +} + +func (s *SysSettingById) Generate() *SysSettingById { + cp := *s + return &cp +} + +func (s *SysSettingById) GetId() interface{} { + return s.Id +} + +func (s *SysSettingById) Bind(ctx *gin.Context) error { + msgID := tools.GenerateMsgIDFromContext(ctx) + err := ctx.ShouldBindUri(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBindUri error: %s", msgID, err.Error()) + return err + } + err = ctx.ShouldBind(s) + if err != nil { + log.Debugf("MsgID[%s] ShouldBind error: %#v", msgID, err.Error()) + } + return err +} + +func (s *SysSettingById) GenerateM() (*models.SysSetting, error) { + return &models.SysSetting{}, nil +} diff --git a/app/admin/service/sys_setting.go b/app/admin/service/sys_setting.go new file mode 100644 index 00000000..e0adb464 --- /dev/null +++ b/app/admin/service/sys_setting.go @@ -0,0 +1,53 @@ +package service + +import ( + "errors" + "go-admin/app/admin/models" + "go-admin/common/log" + "go-admin/common/service" + "gorm.io/gorm" +) + +type SysSetting struct { + service.Service +} + +// GetSysSetting 获取SysSetting对象 +func (e *SysSetting) GetSysSetting(model *models.SysSetting) error { + var err error + var data models.SysSetting + msgID := e.MsgID + + db := e.Orm.Model(&data). + First(model) + err = db.Error + if err != nil && errors.Is(err, gorm.ErrRecordNotFound) { + err = errors.New("查看对象不存在或无权查看") + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + if db.Error != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + return nil +} + +// UpdateSysSetting 修改SysSetting对象 +func (e *SysSetting) UpdateSysSetting(c *models.SysSetting) error { + var err error + var data models.SysSetting + msgID := e.MsgID + + db := e.Orm.Model(&data). + Where(c.GetId()).Updates(c) + if db.Error != nil { + log.Errorf("msgID[%s] db error:%s", msgID, err) + return err + } + if db.RowsAffected == 0 { + return errors.New("无权更新该数据") + + } + return nil +}