104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
|
package impl
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/role"
|
||
|
"github.com/infraboard/mcube/v2/exception"
|
||
|
"github.com/infraboard/mcube/v2/ioc/config/datasource"
|
||
|
"github.com/infraboard/mcube/v2/types"
|
||
|
"gorm.io/gorm"
|
||
|
)
|
||
|
|
||
|
// 创建角色
|
||
|
func (i *RoleServiceImpl) CreateRole(ctx context.Context, in *role.CreateRoleRequest) (*role.Role, error) {
|
||
|
if err := in.Validate(); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
ins := role.NewRole()
|
||
|
ins.CreateRoleRequest = *in
|
||
|
|
||
|
if err := datasource.DBFromCtx(ctx).
|
||
|
Create(ins).
|
||
|
Error; err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return ins, nil
|
||
|
}
|
||
|
|
||
|
// 列表查询
|
||
|
func (i *RoleServiceImpl) QueryRole(ctx context.Context, in *role.QueryRoleRequest) (*types.Set[*role.Role], error) {
|
||
|
set := types.New[*role.Role]()
|
||
|
|
||
|
query := datasource.DBFromCtx(ctx).Model(&role.Role{})
|
||
|
if len(in.RoleIds) > 0 {
|
||
|
query = query.Where("id IN ?", in.RoleIds)
|
||
|
in.PageSize = uint64(len(in.RoleIds))
|
||
|
}
|
||
|
err := query.Count(&set.Total).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
err = query.
|
||
|
Order("created_at desc").
|
||
|
Offset(int(in.ComputeOffset())).
|
||
|
Limit(int(in.PageSize)).
|
||
|
Find(&set.Items).
|
||
|
Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return set, nil
|
||
|
}
|
||
|
|
||
|
// 详情查询
|
||
|
func (i *RoleServiceImpl) DescribeRole(ctx context.Context, in *role.DescribeRoleRequest) (*role.Role, error) {
|
||
|
query := datasource.DBFromCtx(ctx)
|
||
|
|
||
|
ins := &role.Role{}
|
||
|
if err := query.Where("id = ?", in.Id).First(ins).Error; err != nil {
|
||
|
if err == gorm.ErrRecordNotFound {
|
||
|
return nil, exception.NewNotFound("role %d not found", in.Id)
|
||
|
}
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
pm, err := i.QueryApiPermission(ctx, role.NewQueryApiPermissionRequest().AddRoleId(in.Id))
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
ins.ApiPermissions = pm
|
||
|
|
||
|
return ins, nil
|
||
|
}
|
||
|
|
||
|
// 更新角色
|
||
|
func (i *RoleServiceImpl) UpdateRole(ctx context.Context, in *role.UpdateRoleRequest) (*role.Role, error) {
|
||
|
descReq := role.NewDescribeRoleRequest()
|
||
|
descReq.SetId(in.Id)
|
||
|
ins, err := i.DescribeRole(ctx, descReq)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
ins.CreateRoleRequest = in.CreateRoleRequest
|
||
|
return ins, datasource.DBFromCtx(ctx).Where("id = ?", in.Id).Updates(ins).Error
|
||
|
}
|
||
|
|
||
|
// 删除角色
|
||
|
func (i *RoleServiceImpl) DeleteRole(ctx context.Context, in *role.DeleteRoleRequest) (*role.Role, error) {
|
||
|
descReq := role.NewDescribeRoleRequest()
|
||
|
descReq.SetId(in.Id)
|
||
|
ins, err := i.DescribeRole(ctx, descReq)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return ins, datasource.DBFromCtx(ctx).
|
||
|
Where("id = ?", in.Id).
|
||
|
Delete(&role.Role{}).
|
||
|
Error
|
||
|
}
|