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

     1  package grpc
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/infraboard/mcube/app"
     7  	"github.com/infraboard/mcube/logger"
     8  	"github.com/infraboard/mcube/logger/zap"
     9  	"go.mongodb.org/mongo-driver/mongo"
    10  	"go.mongodb.org/mongo-driver/mongo/options"
    11  	"go.mongodb.org/mongo-driver/x/bsonx"
    12  	"google.golang.org/grpc"
    13  
    14  	"github.com/infraboard/keyauth/apps/department"
    15  	"github.com/infraboard/keyauth/apps/namespace"
    16  	"github.com/infraboard/keyauth/apps/policy"
    17  	"github.com/infraboard/keyauth/apps/role"
    18  	"github.com/infraboard/keyauth/conf"
    19  )
    20  
    21  var (
    22  	// Service 服务实例
    23  	svr = &service{}
    24  )
    25  
    26  type service struct {
    27  	col    *mongo.Collection
    28  	depart department.ServiceServer
    29  	policy policy.ServiceServer
    30  	role   role.ServiceServer
    31  	log    logger.Logger
    32  
    33  	namespace.UnimplementedServiceServer
    34  }
    35  
    36  func (s *service) Config() error {
    37  	s.depart = app.GetGrpcApp(department.AppName).(department.ServiceServer)
    38  	s.policy = app.GetGrpcApp(policy.AppName).(policy.ServiceServer)
    39  	s.role = app.GetGrpcApp(role.AppName).(role.ServiceServer)
    40  
    41  	db := conf.C().Mongo.GetDB()
    42  	ac := db.Collection("namespace")
    43  
    44  	indexs := []mongo.IndexModel{
    45  		{
    46  			Keys: bsonx.Doc{
    47  				{Key: "domain", Value: bsonx.Int32(-1)},
    48  				{Key: "name", Value: bsonx.Int32(-1)},
    49  			},
    50  			Options: options.Index().SetUnique(true),
    51  		},
    52  		{
    53  			Keys: bsonx.Doc{{Key: "create_at", Value: bsonx.Int32(-1)}},
    54  		},
    55  	}
    56  
    57  	_, err := ac.Indexes().CreateMany(context.Background(), indexs)
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	s.col = ac
    63  	s.log = zap.L().Named("Namespace")
    64  	return nil
    65  }
    66  
    67  func (s *service) Name() string {
    68  	return namespace.AppName
    69  }
    70  
    71  func (s *service) Registry(server *grpc.Server) {
    72  	namespace.RegisterServiceServer(server, svr)
    73  }
    74  
    75  func init() {
    76  	app.RegistryGrpcApp(svr)
    77  }