149 lines
3.8 KiB
Go
149 lines
3.8 KiB
Go
|
package impl
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/namespace"
|
||
|
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/policy"
|
||
|
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/role"
|
||
|
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/user"
|
||
|
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/view"
|
||
|
"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 *PolicyServiceImpl) CreatePolicy(ctx context.Context, in *policy.CreatePolicyRequest) (*policy.Policy, error) {
|
||
|
if err := in.Validate(); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
ins := policy.NewPolicy()
|
||
|
ins.CreatePolicyRequest = *in
|
||
|
|
||
|
if err := datasource.DBFromCtx(ctx).
|
||
|
Create(ins).
|
||
|
Error; err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return ins, nil
|
||
|
}
|
||
|
|
||
|
// 查询策略列表
|
||
|
func (i *PolicyServiceImpl) QueryPolicy(ctx context.Context, in *policy.QueryPolicyRequest) (*types.Set[*policy.Policy], error) {
|
||
|
set := types.New[*policy.Policy]()
|
||
|
|
||
|
query := datasource.DBFromCtx(ctx).Model(&policy.Policy{}).Order("created_at desc")
|
||
|
err := query.Count(&set.Total).Error
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if !in.SkipPage {
|
||
|
query = query.
|
||
|
Offset(int(in.ComputeOffset())).
|
||
|
Limit(int(in.PageSize))
|
||
|
}
|
||
|
|
||
|
if err = query.Find(&set.Items).Error; err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if in.WithUser {
|
||
|
userReq := user.NewQueryUserRequest()
|
||
|
set.ForEach(func(t *policy.Policy) {
|
||
|
userReq.AddUser(t.UserId)
|
||
|
})
|
||
|
userSet, err := user.GetService().QueryUser(ctx, userReq)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
set.ForEach(func(p *policy.Policy) {
|
||
|
p.User = userSet.Filter(func(t *user.User) bool {
|
||
|
return p.UserId == t.Id
|
||
|
}).First()
|
||
|
})
|
||
|
}
|
||
|
if in.WithRole {
|
||
|
roleReq := role.NewQueryRoleRequest()
|
||
|
set.ForEach(func(t *policy.Policy) {
|
||
|
roleReq.AddRoleId(t.RoleId)
|
||
|
})
|
||
|
roleSet, err := role.GetService().QueryRole(ctx, roleReq)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
set.ForEach(func(p *policy.Policy) {
|
||
|
p.Role = roleSet.Filter(func(t *role.Role) bool {
|
||
|
return p.RoleId == t.Id
|
||
|
}).First()
|
||
|
})
|
||
|
}
|
||
|
if in.WithNamespace {
|
||
|
nsReq := namespace.NewQueryNamespaceRequest()
|
||
|
set.ForEach(func(t *policy.Policy) {
|
||
|
if t.NamespaceId != nil {
|
||
|
nsReq.AddNamespaceIds(*t.NamespaceId)
|
||
|
}
|
||
|
})
|
||
|
nsSet, err := namespace.GetService().QueryNamespace(ctx, nsReq)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
set.ForEach(func(p *policy.Policy) {
|
||
|
if p.NamespaceId != nil {
|
||
|
p.Namespace = nsSet.Filter(func(t *namespace.Namespace) bool {
|
||
|
return *p.NamespaceId == t.Id
|
||
|
}).First()
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
return set, nil
|
||
|
}
|
||
|
|
||
|
// 查询详情
|
||
|
func (i *PolicyServiceImpl) DescribePolicy(ctx context.Context, in *policy.DescribePolicyRequest) (*policy.Policy, error) {
|
||
|
query := datasource.DBFromCtx(ctx)
|
||
|
|
||
|
ins := &policy.Policy{}
|
||
|
if err := query.Where("id =?", in.Id).First(ins).Error; err != nil {
|
||
|
if err == gorm.ErrRecordNotFound {
|
||
|
return nil, exception.NewNotFound("policy %d not found", in.Id)
|
||
|
}
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return ins, nil
|
||
|
}
|
||
|
|
||
|
// 更新策略
|
||
|
func (i *PolicyServiceImpl) UpdatePolicy(ctx context.Context, in *policy.UpdatePolicyRequest) (*policy.Policy, error) {
|
||
|
descReq := policy.NewDescribePolicyRequest()
|
||
|
descReq.SetId(in.Id)
|
||
|
ins, err := i.DescribePolicy(ctx, descReq)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
ins.CreatePolicyRequest = in.CreatePolicyRequest
|
||
|
return ins, datasource.DBFromCtx(ctx).Where("id = ?", in.Id).Updates(ins).Error
|
||
|
}
|
||
|
|
||
|
// 删除策略
|
||
|
func (i *PolicyServiceImpl) DeletePolicy(ctx context.Context, in *policy.DeletePolicyRequest) (*policy.Policy, error) {
|
||
|
descReq := policy.NewDescribePolicyRequest()
|
||
|
descReq.SetId(in.Id)
|
||
|
ins, err := i.DescribePolicy(ctx, descReq)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return ins, datasource.DBFromCtx(ctx).
|
||
|
Where("id = ?", in.Id).
|
||
|
Delete(&view.Menu{}).
|
||
|
Error
|
||
|
}
|