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

     1  package impl
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/infraboard/keyauth/apps/wxwork"
     7  	"github.com/infraboard/mcube/exception"
     8  	"go.mongodb.org/mongo-driver/mongo"
     9  
    10  	authWXWork "github.com/infraboard/keyauth/apps/provider/auth/wxwork"
    11  )
    12  
    13  func (s *service) SaveConfig(req *wxwork.SaveConfRequest) (
    14  	*wxwork.WechatWorkConfig, error) {
    15  	ins, err := wxwork.NewWechatWorkConfig(req)
    16  	if err != nil {
    17  		return nil, exception.NewBadRequest("validate error, %s", err)
    18  	}
    19  
    20  	p := authWXWork.NewProvider(ins.Config)
    21  	if err := p.Check(); err != nil {
    22  		return nil, exception.NewBadRequest("try Authentication error, %s", err)
    23  	}
    24  
    25  	descWxwork := wxwork.NewDescribeConfWithDomain(ins.Domain)
    26  	old, err := s.DescribeConfig(descWxwork)
    27  	if err != nil && !exception.IsNotFoundError(err) {
    28  		return nil, err
    29  	}
    30  
    31  	// 保存入库
    32  	if old == nil {
    33  		err = s.save(ins)
    34  	} else {
    35  		err = s.update(ins)
    36  	}
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	return ins, nil
    42  }
    43  
    44  func (s *service) QueryConfig(req *wxwork.QueryConfigRequest) (*wxwork.WechatWorkSet, error) {
    45  	r := newQueryConfigRequest(req)
    46  	resp, err := s.col.Find(context.TODO(), r.FindFilter(), r.FindOptions())
    47  
    48  	if err != nil {
    49  		return nil, exception.NewInternalServerError("find wechat work config error, error is %s", err)
    50  	}
    51  
    52  	set := wxwork.NewConfigSet(req.PageRequest)
    53  	// 循环
    54  	for resp.Next(context.TODO()) {
    55  		ins := wxwork.NewDefaultWechatWorkConfig()
    56  		if err := resp.Decode(ins); err != nil {
    57  			return nil, exception.NewInternalServerError("decode wechat work config error, error is %s", err)
    58  		}
    59  
    60  		set.Add(ins)
    61  	}
    62  
    63  	// count
    64  	count, err := s.col.CountDocuments(context.TODO(), r.FindFilter())
    65  	if err != nil {
    66  		return nil, exception.NewInternalServerError("get wechat work config count error, error is %s", err)
    67  	}
    68  	set.Total = count
    69  	return set, nil
    70  }
    71  
    72  func (s *service) DescribeConfig(req *wxwork.DescribeWechatWorkConf) (*wxwork.WechatWorkConfig, error) {
    73  	r, err := newDescribeWechatWorkRequest(req)
    74  	if err != nil {
    75  		return nil, err
    76  	}
    77  
    78  	ins := wxwork.NewDefaultWechatWorkConfig()
    79  	if err := s.col.FindOne(context.TODO(), r.FindFilter()).Decode(ins); err != nil {
    80  		if err == mongo.ErrNoDocuments {
    81  			return nil, exception.NewNotFound("wxwork %s not found", req)
    82  		}
    83  
    84  		return nil, exception.NewInternalServerError("find wxwork %s error, %s", req.Domain, err)
    85  	}
    86  
    87  	return ins, nil
    88  }
    89  
    90  func (s *service) DeleteConfig(req *wxwork.DescribeWechatWorkConf) error {
    91  	r, err := newDescribeWechatWorkRequest(req)
    92  	if err != nil {
    93  		return err
    94  	}
    95  
    96  	_, err = s.col.DeleteOne(context.TODO(), r.FindFilter())
    97  	if err != nil {
    98  		if err == mongo.ErrNoDocuments {
    99  			return exception.NewNotFound("wxwork %s not found", req)
   100  		}
   101  
   102  		return exception.NewInternalServerError("find wxwork %s error, %s", req.Domain, err)
   103  	}
   104  
   105  	return nil
   106  }