/
m_role_menu.go
121 lines (105 loc) · 3.39 KB
/
m_role_menu.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package model
import (
"context"
"time"
"github.com/google/wire"
"github.com/ops-cn/admin/app/model"
"github.com/ops-cn/admin/app/model/impl/mongo/entity"
"github.com/ops-cn/common/errors"
"github.com/ops-cn/common/schema"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
var _ model.IRoleMenu = (*RoleMenu)(nil)
// RoleMenuSet 注入RoleMenu
var RoleMenuSet = wire.NewSet(wire.Struct(new(RoleMenu), "*"), wire.Bind(new(model.IRoleMenu), new(*RoleMenu)))
// RoleMenu 角色菜单存储
type RoleMenu struct {
Client *mongo.Client
}
func (a *RoleMenu) getQueryOption(opts ...schema.RoleMenuQueryOptions) schema.RoleMenuQueryOptions {
var opt schema.RoleMenuQueryOptions
if len(opts) > 0 {
opt = opts[0]
}
return opt
}
// Query 查询数据
func (a *RoleMenu) Query(ctx context.Context, params schema.RoleMenuQueryParam, opts ...schema.RoleMenuQueryOptions) (*schema.RoleMenuQueryResult, error) {
opt := a.getQueryOption(opts...)
c := entity.GetRoleMenuCollection(ctx, a.Client)
filter := DefaultFilter(ctx)
roleIDs := params.RoleIDs
if v := params.RoleID; v != "" {
roleIDs = append(roleIDs, v)
}
if v := roleIDs; len(v) > 0 {
filter = append(filter, Filter("role_id", bson.M{"$in": v}))
}
opt.OrderFields = append(opt.OrderFields, schema.NewOrderField("_id", schema.OrderByDESC))
var list entity.RoleMenus
pr, err := WrapPageQuery(ctx, c, params.PaginationParam, filter, &list, options.Find().SetSort(ParseOrder(opt.OrderFields)))
if err != nil {
return nil, errors.WithStack(err)
}
qr := &schema.RoleMenuQueryResult{
PageResult: pr,
Data: list.ToSchemaRoleMenus(),
}
return qr, nil
}
// Get 查询指定数据
func (a *RoleMenu) Get(ctx context.Context, id string, opts ...schema.RoleMenuQueryOptions) (*schema.RoleMenu, error) {
c := entity.GetRoleMenuCollection(ctx, a.Client)
filter := DefaultFilter(ctx, Filter("_id", id))
var item entity.RoleMenu
ok, err := FindOne(ctx, c, filter, &item)
if err != nil {
return nil, errors.WithStack(err)
} else if !ok {
return nil, nil
}
return item.ToSchemaRoleMenu(), nil
}
// Create 创建数据
func (a *RoleMenu) Create(ctx context.Context, item schema.RoleMenu) error {
eitem := entity.SchemaRoleMenu(item).ToRoleMenu()
eitem.CreatedAt = time.Now()
eitem.UpdatedAt = time.Now()
c := entity.GetRoleMenuCollection(ctx, a.Client)
err := Insert(ctx, c, eitem)
if err != nil {
return errors.WithStack(err)
}
return nil
}
// Update 更新数据
func (a *RoleMenu) Update(ctx context.Context, id string, item schema.RoleMenu) error {
eitem := entity.SchemaRoleMenu(item).ToRoleMenu()
eitem.UpdatedAt = time.Now()
c := entity.GetRoleMenuCollection(ctx, a.Client)
err := Update(ctx, c, DefaultFilter(ctx, Filter("_id", id)), eitem)
if err != nil {
return errors.WithStack(err)
}
return nil
}
// Delete 删除数据
func (a *RoleMenu) Delete(ctx context.Context, id string) error {
c := entity.GetRoleMenuCollection(ctx, a.Client)
err := Delete(ctx, c, DefaultFilter(ctx, Filter("_id", id)))
if err != nil {
return errors.WithStack(err)
}
return nil
}
// DeleteByRoleID 根据角色ID删除数据
func (a *RoleMenu) DeleteByRoleID(ctx context.Context, roleID string) error {
c := entity.GetRoleMenuCollection(ctx, a.Client)
err := DeleteMany(ctx, c, DefaultFilter(ctx, Filter("role_id", roleID)))
if err != nil {
return errors.WithStack(err)
}
return nil
}