github.com/infraboard/keyauth@v0.8.1/apps/user/impl/query.go (about) 1 package impl 2 3 import ( 4 "github.com/infraboard/mcube/exception" 5 "go.mongodb.org/mongo-driver/bson" 6 "go.mongodb.org/mongo-driver/mongo/options" 7 8 "github.com/infraboard/keyauth/apps/user" 9 ) 10 11 func newQueryUserRequest(req *user.QueryAccountRequest) (*queryUserRequest, error) { 12 if err := req.Validate(); err != nil { 13 return nil, err 14 } 15 16 return &queryUserRequest{ 17 QueryAccountRequest: req, 18 }, nil 19 } 20 21 type queryUserRequest struct { 22 *user.QueryAccountRequest 23 } 24 25 func (r *queryUserRequest) FindOptions() *options.FindOptions { 26 pageSize := int64(r.Page.PageSize) 27 skip := int64(r.Page.PageSize) * int64(r.Page.PageNumber-1) 28 29 opt := &options.FindOptions{ 30 Sort: bson.D{{Key: "create_at", Value: -1}}, 31 Limit: &pageSize, 32 Skip: &skip, 33 } 34 35 return opt 36 } 37 38 func (r *queryUserRequest) FindFilter() bson.M { 39 filter := bson.M{ 40 "type": r.UserType, 41 "domain": r.Domain, 42 } 43 44 if len(r.Accounts) > 0 { 45 filter["_id"] = bson.M{"$in": r.Accounts} 46 } 47 if r.DepartmentId != "" { 48 if r.WithAllSub { 49 filter["$or"] = bson.A{ 50 bson.M{"department_id": bson.M{"$regex": r.DepartmentId, "$options": "im"}}, 51 } 52 } else { 53 filter["department_id"] = r.DepartmentId 54 } 55 } 56 57 if r.Keywords != "" { 58 filter["$or"] = bson.A{ 59 bson.M{"_id": bson.M{"$regex": r.Keywords, "$options": "im"}}, 60 bson.M{"profile.mobile": bson.M{"$regex": r.Keywords, "$options": "im"}}, 61 bson.M{"profile.email": bson.M{"$regex": r.Keywords, "$options": "im"}}, 62 } 63 } 64 65 return filter 66 } 67 68 func newDescribeRequest(req *user.DescribeAccountRequest) (*describeUserRequest, error) { 69 if err := req.Validate(); err != nil { 70 return nil, exception.NewBadRequest(err.Error()) 71 } 72 73 return &describeUserRequest{req}, nil 74 } 75 76 type describeUserRequest struct { 77 *user.DescribeAccountRequest 78 } 79 80 func (r *describeUserRequest) FindFilter() bson.M { 81 filter := bson.M{} 82 83 if r.Account != "" { 84 filter["_id"] = r.Account 85 } 86 87 return filter 88 }