muyu-apiserver/gateway/internal/svc/serviceContext.go

70 lines
2.5 KiB
Go
Raw Permalink Normal View History

package svc
import (
"github.com/casbin/casbin/v2"
_ "github.com/lib/pq"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/rest"
"github.com/zeromicro/go-zero/zrpc"
"muyu-apiserver/gateway/internal/config"
"muyu-apiserver/gateway/internal/middleware"
"muyu-apiserver/gateway/internal/repo"
pkgcasbin "muyu-apiserver/pkg/casbin"
"muyu-apiserver/pkg/tenantctx"
"muyu-apiserver/rpc/inventory/inventoryservice"
"muyu-apiserver/rpc/production/productionservice"
"muyu-apiserver/rpc/purchase/purchaseservice"
"muyu-apiserver/rpc/system/systemservice"
)
type ServiceContext struct {
Config config.Config
AuthorityMiddleware rest.Middleware
CasbinEnforcer *casbin.Enforcer
CrmRepo *repo.CrmRepo
SystemRpc systemservice.SystemService
InventoryRpc inventoryservice.InventoryService
PurchaseRpc purchaseservice.PurchaseService
ProductionRpc productionservice.ProductionService
}
func NewServiceContext(c config.Config) *ServiceContext {
mysqlConn := sqlx.NewMysql(c.DataSource)
var pgConn sqlx.SqlConn
if c.PostgresDataSource != "" {
pgConn = sqlx.NewSqlConn("postgres", c.PostgresDataSource)
} else {
pgConn = mysqlConn
}
var enforcer *casbin.Enforcer
if c.DataSource != "" {
func() {
defer func() {
if r := recover(); r != nil {
logx.Errorf("init casbin enforcer panic: %v (skipped, running without enforcer)", r)
}
}()
e, err := pkgcasbin.NewEnforcer(c.DataSource)
if err != nil {
logx.Errorf("init casbin enforcer failed: %v", err)
return
}
enforcer = e
}()
}
return &ServiceContext{
Config: c,
AuthorityMiddleware: middleware.NewAuthorityMiddleware(enforcer).Handle,
CasbinEnforcer: enforcer,
CrmRepo: repo.NewCrmRepo(pgConn),
SystemRpc: systemservice.NewSystemService(zrpc.MustNewClient(c.SystemRpc, zrpc.WithUnaryClientInterceptor(tenantctx.UnaryClientInterceptor()))),
InventoryRpc: inventoryservice.NewInventoryService(zrpc.MustNewClient(c.InventoryRpc, zrpc.WithUnaryClientInterceptor(tenantctx.UnaryClientInterceptor()))),
PurchaseRpc: purchaseservice.NewPurchaseService(zrpc.MustNewClient(c.PurchaseRpc, zrpc.WithUnaryClientInterceptor(tenantctx.UnaryClientInterceptor()))),
ProductionRpc: productionservice.NewProductionService(zrpc.MustNewClient(c.ProductionRpc, zrpc.WithUnaryClientInterceptor(tenantctx.UnaryClientInterceptor()))),
}
}