github.com/infraboard/keyauth@v0.8.1/apps/user/impl/dao.go (about)

     1  package impl
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/infraboard/mcube/exception"
     7  	"github.com/infraboard/mcube/http/request"
     8  
     9  	"github.com/infraboard/keyauth/apps/department"
    10  	"github.com/infraboard/keyauth/apps/policy"
    11  	"github.com/infraboard/keyauth/apps/user"
    12  )
    13  
    14  func (s *service) saveAccount(u *user.User) error {
    15  	if _, err := s.col.InsertOne(context.TODO(), u); err != nil {
    16  		return exception.NewInternalServerError("inserted user(%s) document error, %s",
    17  			u.Account, err)
    18  	}
    19  
    20  	return nil
    21  }
    22  
    23  func (s *service) queryAccount(ctx context.Context, req *queryUserRequest) (*user.Set, error) {
    24  	userSet := user.NewUserSet()
    25  
    26  	if !req.SkipItems {
    27  		s.log.Debugf("find filter: %s", req.FindFilter())
    28  		resp, err := s.col.Find(context.TODO(), req.FindFilter(), req.FindOptions())
    29  
    30  		// 查询出该空间下的用户列表
    31  		if req.NamespaceId != "" {
    32  			ps, err := s.queryNamespacePolicy(ctx, req.NamespaceId)
    33  			if err != nil {
    34  				return nil, err
    35  			}
    36  			req.Accounts = ps.Users()
    37  		}
    38  
    39  		if err != nil {
    40  			return nil, exception.NewInternalServerError("find user error, error is %s", err)
    41  		}
    42  
    43  		// 循环
    44  		for resp.Next(context.TODO()) {
    45  			u := new(user.User)
    46  			if err := resp.Decode(u); err != nil {
    47  				return nil, exception.NewInternalServerError("decode user error, error is %s", err)
    48  			}
    49  
    50  			// 补充用户的部门信息
    51  			if req.WithDepartment && u.DepartmentId != "" {
    52  				depart, err := s.depart.DescribeDepartment(ctx, department.NewDescribeDepartmentRequestWithID(u.DepartmentId))
    53  				if err != nil {
    54  					s.log.Errorf("get user department error, %s", err)
    55  				} else {
    56  					u.Department = depart
    57  				}
    58  			}
    59  
    60  			u.Desensitize()
    61  			userSet.Add(u)
    62  		}
    63  	}
    64  
    65  	// count
    66  	count, err := s.col.CountDocuments(context.TODO(), req.FindFilter())
    67  	if err != nil {
    68  		return nil, exception.NewInternalServerError("get device count error, error is %s", err)
    69  	}
    70  	userSet.Total = count
    71  
    72  	return userSet, nil
    73  }
    74  
    75  func (s *service) queryNamespacePolicy(ctx context.Context, namespaceID string) (*policy.Set, error) {
    76  	pReq := policy.NewQueryPolicyRequest(request.NewPageRequest(20, 1))
    77  	pReq.NamespaceId = namespaceID
    78  	return s.policy.QueryPolicy(ctx, pReq)
    79  }