From 2ec091bf599894c331b1a4cf0df5b753398b0ff1 Mon Sep 17 00:00:00 2001 From: Blizzard Date: Sun, 11 May 2025 22:54:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Role=20=E5=A2=9E=E5=88=A0=E6=94=B9?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/system/enter.go | 2 + api/v1/system/sys_role.go | 98 ++++++++++++++++++++++++++++++++ initialize/router.go | 1 + model/system/request/sys_role.go | 9 +++ model/system/sys_role.go | 10 ++++ router/system/enter.go | 2 + router/system/role_router.go | 17 ++++++ service/system/enter.go | 1 + service/system/sys_role.go | 54 ++++++++++++++++++ 9 files changed, 194 insertions(+) create mode 100644 api/v1/system/sys_role.go create mode 100644 model/system/request/sys_role.go create mode 100644 model/system/sys_role.go create mode 100644 router/system/role_router.go create mode 100644 service/system/sys_role.go diff --git a/api/v1/system/enter.go b/api/v1/system/enter.go index 50dd9d3..1e0b5e9 100644 --- a/api/v1/system/enter.go +++ b/api/v1/system/enter.go @@ -6,9 +6,11 @@ type ApiGroup struct { AuthApi UserApi ClientApi + RoleApi } var ( UserService = service.ServiceGroupApp.SystemServiceGroup.UserService ClientService = service.ServiceGroupApp.SystemServiceGroup.ClientService + RoleService = service.ServiceGroupApp.SystemServiceGroup.RoleService ) diff --git a/api/v1/system/sys_role.go b/api/v1/system/sys_role.go new file mode 100644 index 0000000..c4409cb --- /dev/null +++ b/api/v1/system/sys_role.go @@ -0,0 +1,98 @@ +package system + +import ( + "github.com/gin-gonic/gin" + "go.uber.org/zap" + "sundynix-go/global" + "sundynix-go/model/commom/request" + "sundynix-go/model/commom/response" + "sundynix-go/model/system" + systemreq "sundynix-go/model/system/request" +) + +type RoleApi struct { +} + +func (a *RoleApi) SaveRole(context *gin.Context) { + var role system.Role + err := context.ShouldBindJSON(&role) + if err != nil { + response.FailWithMsg(err.Error(), context) + return + } + err = RoleService.SaveRole(role) + if err != nil { + global.Logger.Error("保存角色失败!", zap.Error(err)) + response.FailWithMsg(err.Error(), context) + return + } + response.OkWithMsg("保存角色成功!", context) +} + +func (a *RoleApi) UpdateRole(context *gin.Context) { + var role system.Role + err := context.ShouldBindJSON(&role) + if err != nil { + response.FailWithMsg(err.Error(), context) + return + } + err = RoleService.UpdateRole(role) + if err != nil { + global.Logger.Error("更新角色失败!", zap.Error(err)) + response.FailWithMsg(err.Error(), context) + return + } + response.OkWithMsg("更新角色成功!", context) +} + +func (a *RoleApi) GetRoleList(c *gin.Context) { + var pageInfo systemreq.GetRoleList + err := c.ShouldBindJSON(&pageInfo) + if err != nil { + response.FailWithMsg(err.Error(), c) + return + } + list, total, err := RoleService.GetRoleList(pageInfo) + if err != nil { + global.Logger.Error("获取角色列表失败!", zap.Error(err)) + response.FailWithMsg(err.Error(), c) + } + response.OkWithData(response.PageResult{ + List: list, + Total: total, + Page: pageInfo.Current, + PageSize: pageInfo.PageSize, + }, c) +} + +func (a *RoleApi) Delete(context *gin.Context) { + var ids request.IdsReq + err := context.ShouldBindJSON(&ids) + if err != nil { + response.FailWithMsg(err.Error(), context) + return + } + err = RoleService.DeleteRoleByIds(ids) + if err != nil { + global.Logger.Error("删除角色失败!", zap.Error(err)) + response.FailWithMsg(err.Error(), context) + return + } + response.OkWithMsg("删除角色成功!", context) +} + +func (a *RoleApi) Detail(context *gin.Context) { + var idInfo request.GetById + err := context.ShouldBindJSON(&idInfo) + if err != nil { + response.FailWithMsg(err.Error(), context) + return + } + role, err := RoleService.GetRoleById(idInfo.ID) + if err != nil { + global.Logger.Error("获取角色详情失败!", zap.Error(err)) + response.FailWithMsg(err.Error(), context) + return + } + response.OkWithData(role, context) +} diff --git a/initialize/router.go b/initialize/router.go index 489444b..1b759dd 100644 --- a/initialize/router.go +++ b/initialize/router.go @@ -35,6 +35,7 @@ func Routers() { //需要鉴权的路由 systemRouter.InitUserRouter(NeedAuthGroup) //用户相关 systemRouter.InitClientRouter(NeedAuthGroup) //客户端相关 + systemRouter.InitRoleRouter(NeedAuthGroup) //角色相关 } address := fmt.Sprintf(":%d", global.Config.System.Addr) diff --git a/model/system/request/sys_role.go b/model/system/request/sys_role.go new file mode 100644 index 0000000..f56c60c --- /dev/null +++ b/model/system/request/sys_role.go @@ -0,0 +1,9 @@ +package request + +import common "sundynix-go/model/commom/request" + +type GetRoleList struct { + common.PageInfo + Code string `json:"code" form:"code"` + Name string `json:"name" form:"name"` +} diff --git a/model/system/sys_role.go b/model/system/sys_role.go new file mode 100644 index 0000000..eb76ac3 --- /dev/null +++ b/model/system/sys_role.go @@ -0,0 +1,10 @@ +package system + +import "sundynix-go/global" + +type Role struct { + global.BaseModel + Name string `json:"name" form:"name"` + Code string `json:"code" form:"code"` + Sort int `json:"sort" form:"sort"` +} diff --git a/router/system/enter.go b/router/system/enter.go index bfa2f57..0e4f27e 100644 --- a/router/system/enter.go +++ b/router/system/enter.go @@ -6,6 +6,7 @@ type RouterGroup struct { AuthRouter UserRouter ClientRouter + RoleRouter } // 初始化路由 @@ -13,4 +14,5 @@ var ( authApi = v1.ApiGroupApp.SystemApiGroup.AuthApi userApi = v1.ApiGroupApp.SystemApiGroup.UserApi clientApi = v1.ApiGroupApp.SystemApiGroup.ClientApi + roleApi = v1.ApiGroupApp.SystemApiGroup.RoleApi ) diff --git a/router/system/role_router.go b/router/system/role_router.go new file mode 100644 index 0000000..87b1901 --- /dev/null +++ b/router/system/role_router.go @@ -0,0 +1,17 @@ +package system + +import "github.com/gin-gonic/gin" + +type RoleRouter struct { +} + +func (r *RoleRouter) InitRoleRouter(router *gin.RouterGroup) { + roleRouter := router.Group("role") + { + roleRouter.POST("save", roleApi.SaveRole) + roleRouter.POST("update", roleApi.UpdateRole) + roleRouter.POST("getRoleList", roleApi.GetRoleList) + roleRouter.GET("delete", roleApi.Delete) + roleRouter.GET("detail", roleApi.Detail) + } +} diff --git a/service/system/enter.go b/service/system/enter.go index 7f0bff6..87b367b 100644 --- a/service/system/enter.go +++ b/service/system/enter.go @@ -3,4 +3,5 @@ package system type ServiceGroup struct { UserService ClientService + RoleService } diff --git a/service/system/sys_role.go b/service/system/sys_role.go new file mode 100644 index 0000000..1b21649 --- /dev/null +++ b/service/system/sys_role.go @@ -0,0 +1,54 @@ +package system + +import ( + "errors" + "gorm.io/gorm" + "sundynix-go/global" + common "sundynix-go/model/commom/request" + "sundynix-go/model/system" + systemReq "sundynix-go/model/system/request" +) + +type RoleService struct { +} + +var RoleServiceApp = new(RoleService) + +func (s *RoleService) SaveRole(role system.Role) error { + if !errors.Is(global.DB.Where("code = ?", role.Code).First(&system.Role{}).Error, gorm.ErrRecordNotFound) { + return errors.New("存在重复角色") + } + return global.DB.Create(&role).Error +} + +func (s *RoleService) UpdateRole(role system.Role) error { + return global.DB.Model(&role).Where("id = ?", role.Id).Updates(&role).Error +} + +func (s *RoleService) GetRoleList(info systemReq.GetRoleList) (list interface{}, total int64, err error) { + limit := info.PageSize + offset := info.PageSize * (info.Current - 1) + db := global.DB.Model(&system.Role{}) + var roleList []system.Role + if info.Code != "" { + db = db.Where("code = ?", info.Code) + } + if info.Name != "" { + db = db.Where("name LIKE ?", "%"+info.Name+"%") + } + err = db.Count(&total).Error + if err != nil { + return + } + err = db.Limit(limit).Offset(offset).Find(&roleList).Error + return roleList, total, err +} + +func (s *RoleService) DeleteRoleByIds(ids common.IdsReq) error { + return global.DB.Where("id in ?", ids.Ids).Delete(&system.Role{}).Error +} + +func (s *RoleService) GetRoleById(id int) (role system.Role, err error) { + err = global.DB.Where("id = ?", id).First(&role).Error + return role, err +}