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  }