package mwacc import ( "context" "fmt" "hkdj-web-server/pub/common/errors" "hkdj-web-server/pub/common/log" "hkdj-web-server/pub/common/pageopt" "hkdj-web-server/pub/common/srvdef" "hkdj-web-server/pub/mongos" "time" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo/options" ) // 角色聚集处理 func RoleAggregate(ctx context.Context, filters []primitive.M, opts ...*options.AggregateOptions) (roles []*MwRole, err error) { roles = make([]*MwRole, 0) err = mwRoleColl.Aggregate(ctx, &roles, filters) return } // 过滤查询数量 func RoleCountByFilter(ctx context.Context, filters primitive.M, opts ...*options.CountOptions) (c int64, err error) { c, err = mwRoleColl.Count(ctx, filters) return } // 过滤查询角色 func FindOneRoleByFilter(ctx context.Context, filters primitive.M, opts ...*options.FindOneOptions) (*MwRole, *srvdef.SrvErr) { var res MwRole err := mwRoleColl.FindOne(ctx, &res, filters, opts...) if err != nil { log.Error("mwacc FindOneRoleByFilter err", log.Any("filters", filters), log.E(err)) return &res, srvdef.New(srvdef.ErrDbQueryError, "", "") } return &res, nil } // 过滤更新 func UpOneRoleByFilter(ctx context.Context, query primitive.M, update primitive.M) *srvdef.SrvErr { _, err := mwRoleColl.UpdateOne(ctx, query, update) if err != nil { log.Error("mwacc UpOneRoleByFilter: db.UpdateOne err", log.Any("update", update), log.E(err)) return srvdef.New(srvdef.ErrDbUpdateError, "", "") } return nil } // 过滤删除角色 func DelRoleByFilter(ctx context.Context, filters primitive.M) *srvdef.SrvErr { _, err := mwRoleColl.DeleteOne(ctx, filters) if err != nil { log.Error("mwacc DelRoleByFilter err", log.Any("filters", filters), log.E(err)) return srvdef.New(srvdef.ErrDbDeleteError, "", "") } return nil } // 更新角色权限 func UpRoleAuth(ctx context.Context, id int64, keys []string, dataRouter []*Router) (ok bool, err error) { _, err = mwRoleColl.UpdateOne(ctx, primitive.M{ FN.MwRole.Id: id, }, primitive.M{ "$set": primitive.M{ FN.MwRole.ApiMenus: keys, FN.MwRole.Router: dataRouter, }, }) if err != nil { log.Error("mvacc UpRoleAuth err", log.Any(FN.MwRole.Id, id), log.E(err)) return false, err } return true, nil } // 获取角色列表 func GetRoleList(ctx context.Context, skip, limit int64, matchs ...pageopt.Matcher) (data []*RoleGetListRec, err error) { data = make([]*RoleGetListRec, 0) err = mwRoleColl.Aggregate(ctx, &data, []primitive.M{ {"$match": pageopt.MergeM(matchs)}, {"$sort": primitive.M{FN.MwRole.Id: -1}}, {"$skip": skip}, {"$limit": limit}, {"$lookup": primitive.M{ "localField": FN.MwRole.Id, "from": TN.MwAcc, "foreignField": FN.MwAcc.RoleId, "as": "onlyRole", }}, {"$project": primitive.M{ FN.MwRole.Id: 1, FN.MwRole.Name: 1, FN.MwRole.Desc: 1, FN.MwRole.IsEnb: 1, FN.MwRole.ApiMenus: 1, FN.MwRole.CreatedAt: 1, FN.MwRole.UpdatedAt: 1, "account": primitive.M{ "$size": "$onlyRole", }, }}, }) if err != nil && err.Error() != errors.NotFind { log.ZapLog.Error(fmt.Sprintf("mwacc GetRoleList error %v", err)) err = errors.MakeWithErr(errors.DBQuery, err) return } return } // 下拉列表 func RoleDrop(ctx context.Context) (data []*RoleDropDoc, err error) { query := primitive.M{FN.MwRole.IsEnb: true} opt := options.Find().SetProjection(primitive.M{ FN.MwRole.Id: 1, FN.MwRole.Name: 1, }) err = mwRoleColl.Find(ctx, &data, query, opt) if err != nil { err = errors.MakeWithErr(errors.DBQuery, err) return } return } // 插入角色 func RoleAdd(ctx context.Context, name string, desc string, isEnb bool) (ok bool, err error) { c, err := mwRoleColl.Count(ctx, primitive.M{FN.MwRole.Name: name}) if c > 0 { err = errors.MakeWithMsg(errors.DBInsert, "角色名称") return false, err } _, err = mwRoleColl.InsertOne(ctx, primitive.M{ FN.MwRole.Id: mongos.Lid.MwRole.Get(), FN.MwRole.Name: name, FN.MwRole.Desc: desc, FN.MwRole.IsEnb: isEnb, FN.MwRole.CreatedAt: time.Now(), }) if err != nil { log.ZapLog.Error(fmt.Sprintf("InsertRole mongo error %v", err)) err = errors.MakeWithErr(errors.DBInsert, err) return false, err } return true, nil }