-
Notifications
You must be signed in to change notification settings - Fork 12
/
m_menu.go
137 lines (116 loc) · 3.91 KB
/
m_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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package model
import (
"context"
"github.com/google/wire"
"github.com/jinzhu/gorm"
"github.com/tanjiancheng/gin-amis-admin/internal/app/model"
"github.com/tanjiancheng/gin-amis-admin/internal/app/model/impl/gorm/entity"
"github.com/tanjiancheng/gin-amis-admin/internal/app/schema"
"github.com/tanjiancheng/gin-amis-admin/pkg/errors"
)
var _ model.IMenu = (*Menu)(nil)
// MenuSet 注入Menu
var MenuSet = wire.NewSet(wire.Struct(new(Menu), "*"), wire.Bind(new(model.IMenu), new(*Menu)))
// Menu 菜单存储
type Menu struct {
DB *gorm.DB
}
func (a *Menu) getQueryOption(opts ...schema.MenuQueryOptions) schema.MenuQueryOptions {
var opt schema.MenuQueryOptions
if len(opts) > 0 {
opt = opts[0]
}
return opt
}
// Query 查询数据
func (a *Menu) Query(ctx context.Context, params schema.MenuQueryParam, opts ...schema.MenuQueryOptions) (*schema.MenuQueryResult, error) {
opt := a.getQueryOption(opts...)
db := entity.GetMenuDB(ctx, a.DB)
if v := params.IDs; len(v) > 0 {
db = db.Where("id IN (?)", v)
}
if v := params.Name; v != "" {
db = db.Where("name=?", v)
}
if v := params.ParentID; v != nil {
db = db.Where("parent_id=?", *v)
}
if v := params.PrefixParentPath; v != "" {
db = db.Where("parent_path LIKE ?", v+"%")
}
if v := params.ShowStatus; v != 0 {
db = db.Where("show_status=?", v)
}
if v := params.Status; v != 0 {
db = db.Where("status=?", v)
}
if v := params.QueryValue; v != "" {
v = "%" + v + "%"
db = db.Where("name LIKE ? OR memo LIKE ?", v, v)
}
opt.OrderFields = append(opt.OrderFields, schema.NewOrderField("id", schema.OrderByDESC))
db = db.Order(ParseOrder(opt.OrderFields))
var list entity.Menus
pr, err := WrapPageQuery(ctx, db, params.PaginationParam, &list)
if err != nil {
return nil, errors.WithStack(err)
}
qr := &schema.MenuQueryResult{
PageResult: pr,
Data: list.ToSchemaMenus(),
}
return qr, nil
}
// Get 查询指定数据
func (a *Menu) Get(ctx context.Context, id string, opts ...schema.MenuQueryOptions) (*schema.Menu, error) {
var item entity.Menu
ok, err := FindOne(ctx, entity.GetMenuDB(ctx, a.DB).Where("id=?", id), &item)
if err != nil {
return nil, errors.WithStack(err)
} else if !ok {
return nil, nil
}
return item.ToSchemaMenu(), nil
}
func (a *Menu) GetByRouter(ctx context.Context, router string) (*schema.Menu, error) {
var item entity.Menu
ok, err := FindOne(ctx, entity.GetMenuDB(ctx, a.DB).Where("router=?", router), &item)
if err != nil {
return nil, errors.WithStack(err)
} else if !ok {
return nil, nil
}
return item.ToSchemaMenu(), nil
}
// Create 创建数据
func (a *Menu) Create(ctx context.Context, item schema.Menu) error {
eitem := entity.SchemaMenu(item).ToMenu()
result := entity.GetMenuDB(ctx, a.DB).Create(eitem)
return errors.WithStack(result.Error)
}
// Update 更新数据
func (a *Menu) Update(ctx context.Context, id string, item schema.Menu) error {
eitem := entity.SchemaMenu(item).ToMenu()
result := entity.GetMenuDB(ctx, a.DB).Where("id=?", id).Updates(eitem)
return errors.WithStack(result.Error)
}
// UpdateParentPath 更新父级路径
func (a *Menu) UpdateParentPath(ctx context.Context, id, parentPath string) error {
result := entity.GetMenuDB(ctx, a.DB).Where("id=?", id).Update("parent_path", parentPath)
return errors.WithStack(result.Error)
}
// Delete 删除数据
func (a *Menu) Delete(ctx context.Context, id string) error {
result := entity.GetMenuDB(ctx, a.DB).Where("id=?", id).Delete(entity.Menu{})
return errors.WithStack(result.Error)
}
// Delete 删除数据
func (a *Menu) DeleteByRouter(ctx context.Context, router string) error {
result := entity.GetMenuDB(ctx, a.DB).Where("router=?", router).Delete(entity.Menu{})
return errors.WithStack(result.Error)
}
// UpdateStatus 更新状态
func (a *Menu) UpdateStatus(ctx context.Context, id string, status int) error {
result := entity.GetMenuDB(ctx, a.DB).Where("id=?", id).Update("status", status)
return errors.WithStack(result.Error)
}