complete make role tree
This commit is contained in:
@@ -25,7 +25,7 @@ func NewSysRoleSeeder() contracts.Seeder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SysRoleSeeder) Run(faker *gofakeit.Faker, db *gorm.DB) {
|
func (s *SysRoleSeeder) Run(faker *gofakeit.Faker, db *gorm.DB) {
|
||||||
times := 10
|
times := 50
|
||||||
for i := 0; i < times; i++ {
|
for i := 0; i < times; i++ {
|
||||||
data := s.Generate(faker, i)
|
data := s.Generate(faker, i)
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
@@ -38,10 +38,27 @@ func (s *SysRoleSeeder) Run(faker *gofakeit.Faker, db *gorm.DB) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SysRoleSeeder) Generate(faker *gofakeit.Faker, idx int) models.SysRole {
|
func (s *SysRoleSeeder) Generate(faker *gofakeit.Faker, idx int) models.SysRole {
|
||||||
|
parentID := 0
|
||||||
|
if idx > 10 {
|
||||||
|
parentID = faker.IntRange(1, 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
if idx > 20 {
|
||||||
|
parentID = faker.IntRange(10, 20)
|
||||||
|
}
|
||||||
|
|
||||||
|
if idx > 30 {
|
||||||
|
parentID = faker.IntRange(20, 30)
|
||||||
|
}
|
||||||
|
|
||||||
|
if idx > 40 {
|
||||||
|
parentID = faker.IntRange(30, 40)
|
||||||
|
}
|
||||||
|
|
||||||
return models.SysRole{
|
return models.SysRole{
|
||||||
UUID: faker.UUID(),
|
UUID: faker.UUID(),
|
||||||
Name: faker.Name(),
|
Name: faker.Name(),
|
||||||
ParentID: uint64(faker.IntRange(1, 100)),
|
ParentID: uint64(parentID),
|
||||||
DefaultRouter: faker.Name(),
|
DefaultRouter: faker.Name(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
|
|
||||||
type RoleController interface {
|
type RoleController interface {
|
||||||
GetByFilter(*gin.Context, dto.RoleRequestFilter, request.PageFilter) (*response.PageResponse[*models.SysRole], error)
|
GetByFilter(*gin.Context, dto.RoleRequestFilter, request.PageFilter) (*response.PageResponse[*models.SysRole], error)
|
||||||
|
Tree(*gin.Context) ([]*dto.RoleTree, error)
|
||||||
Create(*gin.Context, dto.RoleRequestForm) error
|
Create(*gin.Context, dto.RoleRequestForm) error
|
||||||
Delete(*gin.Context, int) error
|
Delete(*gin.Context, int) error
|
||||||
UpdateByID(*gin.Context, int, dto.RoleRequestForm) error
|
UpdateByID(*gin.Context, int, dto.RoleRequestForm) error
|
||||||
@@ -36,6 +37,9 @@ func (c *roleControllerImpl) GetByFilter(
|
|||||||
) (*response.PageResponse[*models.SysRole], error) {
|
) (*response.PageResponse[*models.SysRole], error) {
|
||||||
return c.roleSvc.GetByFilter(ctx, filter, page)
|
return c.roleSvc.GetByFilter(ctx, filter, page)
|
||||||
}
|
}
|
||||||
|
func (c *roleControllerImpl) Tree(ctx *gin.Context) ([]*dto.RoleTree, error) {
|
||||||
|
return c.roleSvc.Tree(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *roleControllerImpl) Create(ctx *gin.Context, req dto.RoleRequestForm) error {
|
func (c *roleControllerImpl) Create(ctx *gin.Context, req dto.RoleRequestForm) error {
|
||||||
_, err := c.roleSvc.Create(ctx, req)
|
_, err := c.roleSvc.Create(ctx, req)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ type RoleDao interface {
|
|||||||
UpdateByID(context.Context, *models.SysRole) (*models.SysRole, error)
|
UpdateByID(context.Context, *models.SysRole) (*models.SysRole, error)
|
||||||
DeleteByID(context.Context, uint64) error
|
DeleteByID(context.Context, uint64) error
|
||||||
DeletePermanentlyByID(context.Context, uint64) error
|
DeletePermanentlyByID(context.Context, uint64) error
|
||||||
|
All(context.Context) ([]*models.SysRole, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type roleDaoImpl struct {
|
type roleDaoImpl struct {
|
||||||
@@ -54,6 +55,11 @@ func (dao *roleDaoImpl) GetByFilter(ctx context.Context, filter dto.RoleRequestF
|
|||||||
return items, uint64(total), nil
|
return items, uint64(total), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dao *roleDaoImpl) All(ctx context.Context) ([]*models.SysRole, error) {
|
||||||
|
role := dao.query.SysRole
|
||||||
|
return role.WithContext(ctx).Find()
|
||||||
|
}
|
||||||
|
|
||||||
func (dao *roleDaoImpl) FindByID(ctx context.Context, id uint64) (*models.SysRole, error) {
|
func (dao *roleDaoImpl) FindByID(ctx context.Context, id uint64) (*models.SysRole, error) {
|
||||||
role := dao.query.SysRole
|
role := dao.query.SysRole
|
||||||
return role.WithContext(ctx).Where(role.ID.Eq(id)).First()
|
return role.WithContext(ctx).Where(role.ID.Eq(id)).First()
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ type userDaoImpl struct {
|
|||||||
func NewUserDao(query *query.Query) UserDao {
|
func NewUserDao(query *query.Query) UserDao {
|
||||||
return &userDaoImpl{query: query}
|
return &userDaoImpl{query: query}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dao *userDaoImpl) FindByID(ctx context.Context, id uint64) (*models.User, error) {
|
func (dao *userDaoImpl) FindByID(ctx context.Context, id uint64) (*models.User, error) {
|
||||||
user := dao.query.User
|
user := dao.query.User
|
||||||
return user.WithContext(ctx).Where(user.ID.Eq(id)).First()
|
return user.WithContext(ctx).Where(user.ID.Eq(id)).First()
|
||||||
|
|||||||
@@ -11,3 +11,12 @@ type RoleRequestForm struct {
|
|||||||
ParentID uint `json:"parent_id,omitempty"`
|
ParentID uint `json:"parent_id,omitempty"`
|
||||||
DefaultRouter string `json:"default_router,omitempty"`
|
DefaultRouter string `json:"default_router,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RoleTree struct {
|
||||||
|
ID uint64 `json:"id,omitempty"`
|
||||||
|
UUID string `json:"uuid,omitempty"`
|
||||||
|
Name string `json:"name,omitempty"`
|
||||||
|
ParentID uint64 `json:"parent_id,omitempty"`
|
||||||
|
DefaultRouter string `json:"default_router,omitempty"`
|
||||||
|
Children []*RoleTree `json:"children,omitempty"`
|
||||||
|
}
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ func (r *Route) Register() {
|
|||||||
gen.BindQuery(request.PageFilter{}, err.BindQueryFailed),
|
gen.BindQuery(request.PageFilter{}, err.BindQueryFailed),
|
||||||
))
|
))
|
||||||
|
|
||||||
|
roleGroup.GET("/tree", gen.DataFunc(r.role.Tree))
|
||||||
|
|
||||||
roleGroup.POST("", gen.Func1(
|
roleGroup.POST("", gen.Func1(
|
||||||
r.role.Create,
|
r.role.Create,
|
||||||
gen.BindBody(dto.RoleRequestForm{}, err.BindBodyFailed),
|
gen.BindBody(dto.RoleRequestForm{}, err.BindBodyFailed),
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import (
|
|||||||
type RoleService interface {
|
type RoleService interface {
|
||||||
GetByFilter(context.Context, dto.RoleRequestFilter, request.PageFilter) (*response.PageResponse[*models.SysRole], error)
|
GetByFilter(context.Context, dto.RoleRequestFilter, request.PageFilter) (*response.PageResponse[*models.SysRole], error)
|
||||||
Create(context.Context, dto.RoleRequestForm) (*models.SysRole, error)
|
Create(context.Context, dto.RoleRequestForm) (*models.SysRole, error)
|
||||||
|
Tree(context.Context) ([]*dto.RoleTree, error)
|
||||||
UpdateByID(context.Context, uint64, dto.RoleRequestForm) (*models.SysRole, error)
|
UpdateByID(context.Context, uint64, dto.RoleRequestForm) (*models.SysRole, error)
|
||||||
DeleteByID(context.Context, uint64) error
|
DeleteByID(context.Context, uint64) error
|
||||||
}
|
}
|
||||||
@@ -48,6 +49,32 @@ func (svc *roleService) GetByFilter(
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (svc *roleService) treeMaker(ctx context.Context, models []*models.SysRole, pid uint64) []*dto.RoleTree {
|
||||||
|
items := []*dto.RoleTree{}
|
||||||
|
for _, model := range models {
|
||||||
|
if model.ParentID == pid {
|
||||||
|
items = append(items, &dto.RoleTree{
|
||||||
|
ID: model.ID,
|
||||||
|
UUID: model.UUID,
|
||||||
|
Name: model.Name,
|
||||||
|
ParentID: 0,
|
||||||
|
DefaultRouter: model.DefaultRouter,
|
||||||
|
Children: svc.treeMaker(ctx, models, model.ID),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return items
|
||||||
|
}
|
||||||
|
|
||||||
|
func (svc *roleService) Tree(ctx context.Context) ([]*dto.RoleTree, error) {
|
||||||
|
models, err := svc.dao.All(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return svc.treeMaker(ctx, models, 0), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (svc *roleService) Create(ctx context.Context, req dto.RoleRequestForm) (*models.SysRole, error) {
|
func (svc *roleService) Create(ctx context.Context, req dto.RoleRequestForm) (*models.SysRole, error) {
|
||||||
model := models.SysRole{
|
model := models.SysRole{
|
||||||
UUID: svc.uuid.MustGenerate(),
|
UUID: svc.uuid.MustGenerate(),
|
||||||
|
|||||||
Reference in New Issue
Block a user