github.com/infraboard/keyauth@v0.8.1/apps/domain/impl/domain.go (about) 1 package impl 2 3 import ( 4 "context" 5 6 "github.com/infraboard/mcube/exception" 7 "github.com/infraboard/mcube/types/ftime" 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 11 "github.com/infraboard/keyauth/apps/domain" 12 "github.com/infraboard/keyauth/common/types" 13 ) 14 15 func (s *service) CreateDomain(ctx context.Context, req *domain.CreateDomainRequest) (*domain.Domain, error) { 16 d, err := domain.New(req) 17 if err != nil { 18 return nil, exception.NewBadRequest(err.Error()) 19 } 20 if _, err := s.col.InsertOne(context.TODO(), d); err != nil { 21 return nil, exception.NewInternalServerError("inserted a domain document error, %s", err) 22 } 23 24 return d, nil 25 } 26 27 func (s *service) DescribeDomain(ctx context.Context, req *domain.DescribeDomainRequest) (*domain.Domain, error) { 28 r, err := newDescDomainRequest(req) 29 if err != nil { 30 return nil, exception.NewBadRequest(err.Error()) 31 } 32 33 d := domain.NewDefault() 34 if err := s.col.FindOne(context.TODO(), r.FindFilter()).Decode(d); err != nil { 35 if err == mongo.ErrNoDocuments { 36 return nil, exception.NewNotFound("domain %s not found", req) 37 } 38 39 return nil, exception.NewInternalServerError("find domain %s error, %s", req.Name, err) 40 } 41 42 return d, nil 43 } 44 45 func (s *service) QueryDomain(ctx context.Context, req *domain.QueryDomainRequest) (*domain.Set, error) { 46 r := newQueryDomainRequest(req) 47 resp, err := s.col.Find(context.TODO(), r.FindFilter(), r.FindOptions()) 48 49 if err != nil { 50 return nil, exception.NewInternalServerError("find domain error, error is %s", err) 51 } 52 53 domainSet := domain.NewDomainSet() 54 // 循环 55 for resp.Next(context.TODO()) { 56 d := new(domain.Domain) 57 if err := resp.Decode(d); err != nil { 58 return nil, exception.NewInternalServerError("decode domain error, error is %s", err) 59 } 60 61 domainSet.Add(d) 62 } 63 64 // count 65 count, err := s.col.CountDocuments(context.TODO(), r.FindFilter()) 66 if err != nil { 67 return nil, exception.NewInternalServerError("get device count error, error is %s", err) 68 } 69 domainSet.Total = count 70 71 return domainSet, nil 72 } 73 74 func (s *service) UpdateDomain(ctx context.Context, req *domain.UpdateDomainInfoRequest) (*domain.Domain, error) { 75 if err := req.Validate(); err != nil { 76 return nil, exception.NewBadRequest(err.Error()) 77 } 78 79 d, err := s.DescribeDomain(ctx, domain.NewDescribeDomainRequestWithName(req.Name)) 80 if err != nil { 81 return nil, err 82 } 83 84 switch req.UpdateMode { 85 case types.UpdateMode_PUT: 86 *d.Profile = *req.Profile 87 case types.UpdateMode_PATCH: 88 d.Profile.Patch(req.Profile) 89 default: 90 return nil, exception.NewBadRequest("unknown update mode: %s", req.UpdateMode) 91 } 92 93 d.UpdateAt = ftime.Now().Timestamp() 94 _, err = s.col.UpdateOne(context.TODO(), bson.M{"_id": d.Name}, bson.M{"$set": d}) 95 if err != nil { 96 return nil, exception.NewInternalServerError("update domain(%s) error, %s", d.Name, err) 97 } 98 99 return d, nil 100 } 101 102 func (s *service) UpdateDomainSecurity(ctx context.Context, req *domain.UpdateDomainSecurityRequest) (*domain.SecuritySetting, error) { 103 if err := req.Validate(); err != nil { 104 return nil, exception.NewBadRequest(err.Error()) 105 } 106 107 d, err := s.DescribeDomain(ctx, domain.NewDescribeDomainRequestWithName(req.Name)) 108 if err != nil { 109 return nil, err 110 } 111 112 switch req.UpdateMode { 113 case types.UpdateMode_PUT: 114 *d.SecuritySetting = *req.SecuritySetting 115 case types.UpdateMode_PATCH: 116 d.SecuritySetting.Patch(req.SecuritySetting) 117 default: 118 return nil, exception.NewBadRequest("unknown update mode: %s", req.UpdateMode) 119 } 120 121 d.UpdateAt = ftime.Now().Timestamp() 122 _, err = s.col.UpdateOne(context.TODO(), bson.M{"_id": d.Name}, bson.M{"$set": d}) 123 if err != nil { 124 return nil, exception.NewInternalServerError("update domain(%s) error, %s", d.Name, err) 125 } 126 127 return d.SecuritySetting, nil 128 } 129 130 func (s *service) DeleteDomain(ctx context.Context, req *domain.DeleteDomainRequest) (*domain.Domain, error) { 131 result, err := s.col.DeleteOne(context.TODO(), bson.M{"_id": req.Name}) 132 if err != nil { 133 return nil, exception.NewInternalServerError("delete domain(%s) error, %s", req.Name, err) 134 } 135 136 if result.DeletedCount == 0 { 137 return nil, exception.NewNotFound("domain %s not found", req.Name) 138 } 139 140 return nil, nil 141 }