From 9673f52efa28b2341581dbda8b842450b063fa08 Mon Sep 17 00:00:00 2001 From: wolter Date: Wed, 27 Nov 2024 18:13:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B6=88=E6=81=AF=E6=B8=A0=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/constants/errorcode/business.go | 3 ++ .../backend/cron_report_channel_controller.go | 13 ++++++++ app/http/controllers/base.go | 9 +++++- .../entities/backend/corn_report_channel.go | 29 +++++++++++++---- app/http/entities/common.go | 2 +- app/http/requestmapping/backend.go | 7 ++++ app/http/routes/admin.go | 2 ++ .../cron_report_channel.go | 3 +- app/repository/cron_report_channel.go | 22 +++++++++++++ app/services/cron_report_channel_service.go | 32 ++++++++++++++++++- 10 files changed, 112 insertions(+), 10 deletions(-) create mode 100644 app/repository/cron_report_channel.go diff --git a/app/constants/errorcode/business.go b/app/constants/errorcode/business.go index 9b25117..9d1538c 100644 --- a/app/constants/errorcode/business.go +++ b/app/constants/errorcode/business.go @@ -10,4 +10,7 @@ var ( NotFound = &BusinessErr{code: 404, message: "未找到"} SystemError = &BusinessErr{code: 500, message: "系统错误"} + + // 消息渠道 + ReportChannelNotfound = &BusinessErr{code: 1000, message: "消息渠道不存在"} ) diff --git a/app/http/controllers/backend/cron_report_channel_controller.go b/app/http/controllers/backend/cron_report_channel_controller.go index 7d95fed..8d82696 100644 --- a/app/http/controllers/backend/cron_report_channel_controller.go +++ b/app/http/controllers/backend/cron_report_channel_controller.go @@ -38,3 +38,16 @@ func ReportChannelList(c *gin.Context) { Data: list, }, nil) } + +func ReportChannelUpdate(c *gin.Context) { + req, _ := controllers.GetRequest(c).(*backend.ReportChannelUpdateRequest) + reportChannel := req.Request2DB() + err := services.ReportChannelUpdate(&reportChannel) + controllers.HandRes(c, req, err) +} + +func ReportChannelDelete(c *gin.Context) { + req, _ := controllers.GetRequest(c).(*entities.IdRequest) + err := services.ReportChannelDelete(*req) + controllers.HandRes(c, req, err) +} diff --git a/app/http/controllers/base.go b/app/http/controllers/base.go index 1cbba03..999e1b8 100644 --- a/app/http/controllers/base.go +++ b/app/http/controllers/base.go @@ -15,6 +15,7 @@ import ( zh_translations "gopkg.in/go-playground/validator.v9/translations/zh" "io/ioutil" "net/http" + "reflect" "github.com/gin-gonic/gin" ) @@ -44,7 +45,7 @@ func Error500(c *gin.Context) { */ func GenRequest(c *gin.Context, request interface{}) (msgs []string, err error) { if c.Request.Method == "GET" || c.Request.Method == "DELETE" { - err = c.ShouldBindQuery(request) + err = c.ShouldBind(request) } else { err = c.ShouldBindJSON(request) } @@ -53,6 +54,12 @@ func GenRequest(c *gin.Context, request interface{}) (msgs []string, err error) validate := validator.New() zh_ch := zh.New() + //注册一个函数,获取struct tag里自定义的label作为字段名 + validate.RegisterTagNameFunc(func(fld reflect.StructField) string { + name := fld.Tag.Get("label") + return name + }) + uni := ut.New(zh_ch) trans, _ := uni.GetTranslator("zh") //验证器注册翻译器 diff --git a/app/http/entities/backend/corn_report_channel.go b/app/http/entities/backend/corn_report_channel.go index 06f92c8..ee157ab 100644 --- a/app/http/entities/backend/corn_report_channel.go +++ b/app/http/entities/backend/corn_report_channel.go @@ -7,8 +7,8 @@ import ( type ReportChannelListRequest struct { entities.PageRequest - ReportChannelId int `json:"report_channel_id" validate:"min=0"` - Status int `json:"status"` + ReportChannelId int `json:"report_channel_id" form:"report_channel_id" validate:"min=0"` + Status int `json:"status" form:"status"` } type ReportChannelListResponse struct { @@ -30,10 +30,10 @@ func (this *ReportChannelListResponse) FromDb(in cronreportchannelmodel.CronRepo } type ReportChannelCreateRequest struct { - ClientKey string `json:"client_key"` - ClientSecret string `json:"client_secret"` - Config string `json:"config"` - Status int `json:"status"` + ClientKey string `json:"client_key" validate:"required" label:"服务key"` + ClientSecret string `json:"client_secret" validate:"required" label:"服务secret"` + Config string `json:"config" validate:"required" label:"服务配置"` + Status int `json:"status" validate:"required" label:"状态"` } func (this *ReportChannelCreateRequest) Request2DB() (db cronreportchannelmodel.CronReportChannel) { @@ -43,3 +43,20 @@ func (this *ReportChannelCreateRequest) Request2DB() (db cronreportchannelmodel. db.Status = this.Status return db } + +type ReportChannelUpdateRequest struct { + ReportChannelId uint `json:"report_channel_id"` + ClientKey string `json:"client_key" validate:"required" label:"配置key"` + ClientSecret string `json:"client_secret" validate:"required" label:"配置密钥"` + Config string `json:"config" validate:"required" label:"配置"` + Status int `json:"status" validate:"required" label:"状态"` +} + +func (this *ReportChannelUpdateRequest) Request2DB() (db cronreportchannelmodel.CronReportChannel) { + db.ReportChannelId = this.ReportChannelId + db.ClientKey = this.ClientKey + db.ClientSecret = this.ClientSecret + db.Config = this.Config + db.Status = this.Status + return db +} diff --git a/app/http/entities/common.go b/app/http/entities/common.go index bc32f5a..0bc0619 100644 --- a/app/http/entities/common.go +++ b/app/http/entities/common.go @@ -1,7 +1,7 @@ package entities type IdRequest struct { - Id int64 `json:"id"` + Id uint `json:"id"` } type PageRequest struct { diff --git a/app/http/requestmapping/backend.go b/app/http/requestmapping/backend.go index 06aa3a5..ee0bd9e 100644 --- a/app/http/requestmapping/backend.go +++ b/app/http/requestmapping/backend.go @@ -2,6 +2,7 @@ package requestmapping import ( "cron_admin/app/constants/common" + "cron_admin/app/http/entities" "cron_admin/app/http/entities/backend" ) @@ -11,4 +12,10 @@ var BackendRequestMap = map[string]func() interface{}{ common.ADMIN_OAUTH_V1 + "/sql/add": func() interface{} { return new(backend.DbAddRequest) }, common.ADMIN_OAUTH_V1 + "/sql/edit": func() interface{} { return new(backend.DbEditRequest) }, common.ADMIN_OAUTH_V1 + "/sql/del": func() interface{} { return new(backend.DbDeleteRequest) }, + + // 消息渠道 + common.ADMIN_OAUTH_V1 + "/channel/create": func() interface{} { return new(backend.ReportChannelCreateRequest) }, + common.ADMIN_OAUTH_V1 + "/channel/list": func() interface{} { return new(backend.ReportChannelListRequest) }, + common.ADMIN_OAUTH_V1 + "/channel/update": func() interface{} { return new(backend.ReportChannelUpdateRequest) }, + common.ADMIN_OAUTH_V1 + "/channel/delete": func() interface{} { return new(entities.IdRequest) }, } diff --git a/app/http/routes/admin.go b/app/http/routes/admin.go index a0f3c53..0ffdd28 100644 --- a/app/http/routes/admin.go +++ b/app/http/routes/admin.go @@ -56,6 +56,8 @@ func RegisterAdminRoute(router *gin.Engine) { { mes.GET("/list", backend.ReportChannelList) mes.POST("/create", backend.ReportChannelCreate) + mes.POST("/delete", backend.ReportChannelDelete) + mes.POST("/update", backend.ReportChannelUpdate) } //日志 diff --git a/app/models/cronreportchannelmodel/cron_report_channel.go b/app/models/cronreportchannelmodel/cron_report_channel.go index b66a6e3..56bdd6d 100644 --- a/app/models/cronreportchannelmodel/cron_report_channel.go +++ b/app/models/cronreportchannelmodel/cron_report_channel.go @@ -17,9 +17,10 @@ type CronReportChannel struct { ClientKey string `xorm:"'client_key' varchar(20)"` ClientSecret string `xorm:"'client_secret' varchar(50)"` Config string `xorm:"'config' JSON"` + Status int `xorm:"'status' TINYINT"` CreateTime time.Time `xorm:"'create_time' created timestamp"` UpdateTime time.Time `xorm:"'update_time' updated timestamp"` - Status int `xorm:"'status' TINYINT"` + DeletedTime time.Time `xorm:"'deleted_time' deleted datetime"` } // 表名 diff --git a/app/repository/cron_report_channel.go b/app/repository/cron_report_channel.go new file mode 100644 index 0000000..3ed25cc --- /dev/null +++ b/app/repository/cron_report_channel.go @@ -0,0 +1,22 @@ +package repository + +import ( + "cron_admin/app/models/cronreportchannelmodel" + "xorm.io/xorm" +) + +type ReportChannel struct { + ICommonRepo[cronreportchannelmodel.CronReportChannel] +} + +func NewReportChannelRepo() *ReportChannel { + return &ReportChannel{ + ICommonRepo: NewCommonRepo[cronreportchannelmodel.CronReportChannel](), + } +} + +func (c *ReportChannel) WithByID(id uint) DBOption { + return func(g *xorm.Session) *xorm.Session { + return g.Where("report_channel_id = ?", id) + } +} diff --git a/app/services/cron_report_channel_service.go b/app/services/cron_report_channel_service.go index 91fd0bb..f9116b0 100644 --- a/app/services/cron_report_channel_service.go +++ b/app/services/cron_report_channel_service.go @@ -1,6 +1,8 @@ package services import ( + "cron_admin/app/constants/errorcode" + "cron_admin/app/http/entities" "cron_admin/app/http/entities/backend" "cron_admin/app/models/cronreportchannelmodel" "cron_admin/app/repository" @@ -17,7 +19,7 @@ func ReportChannelCreate(param *cronreportchannelmodel.CronReportChannel) (err e func ReportChannelList(param backend.ReportChannelListRequest) (list []cronreportchannelmodel.CronReportChannel, total int64, err error) { var ( - repo = repository.NewCommonRepo[cronreportchannelmodel.CronReportChannel]() + repo = repository.NewReportChannelRepo() opts = make([]repository.DBOption, 0) ) @@ -34,3 +36,31 @@ func ReportChannelList(param backend.ReportChannelListRequest) (list []cronrepor total, err = repo.FindAndCount(&list, opts...) return } + +func ReportChannelUpdate(param *cronreportchannelmodel.CronReportChannel) (err error) { + var ( + repo = repository.NewCommonRepo[cronreportchannelmodel.CronReportChannel]() + opts = make([]repository.DBOption, 0) + ) + if param.ReportChannelId > 0 { + opts = append(opts, repo.WithByID(param.ReportChannelId)) + } + + _, err = repo.Update(param, opts...) + return +} + +func ReportChannelDelete(param entities.IdRequest) (err error) { + var ( + repo = repository.NewCommonRepo[cronreportchannelmodel.CronReportChannel]() + opts = make([]repository.DBOption, 0) + ) + if param.Id > 0 { + opts = append(opts, repo.WithByID(param.Id)) + } else { + return errorcode.ReportChannelNotfound + } + + _, err = repo.Delete(new(cronreportchannelmodel.CronReportChannel), opts...) + return +}