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 }