124 lines
3.5 KiB
Go
124 lines
3.5 KiB
Go
package svc
|
|
|
|
import (
|
|
"backend/internal/config"
|
|
mgo "backend/pkg/library/mongo"
|
|
"backend/pkg/permission/domain/usecase"
|
|
"backend/pkg/permission/repository"
|
|
uc "backend/pkg/permission/usecase"
|
|
"context"
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
"github.com/zeromicro/go-zero/core/stores/cache"
|
|
"github.com/zeromicro/go-zero/core/stores/mon"
|
|
"github.com/zeromicro/go-zero/core/stores/redis"
|
|
)
|
|
|
|
func NewTokenUC(c *config.Config, rds *redis.Redis) usecase.TokenUseCase {
|
|
return uc.MustTokenUseCase(uc.TokenUseCaseParam{
|
|
TokenRepo: repository.MustTokenRepository(repository.TokenRepositoryParam{
|
|
Redis: rds,
|
|
}),
|
|
Config: c,
|
|
Logger: MustLogger(logx.WithContext(context.Background())),
|
|
})
|
|
}
|
|
|
|
type PermissionUC struct {
|
|
PermissionUC usecase.PermissionUseCase
|
|
RoleUC usecase.RoleUseCase
|
|
RolePermission usecase.RolePermissionUseCase
|
|
UserRole usecase.UserRoleUseCase
|
|
}
|
|
|
|
func NewPermissionUC(c *config.Config) PermissionUC {
|
|
// 準備Mongo Config
|
|
conf := &mgo.Conf{
|
|
Schema: c.Mongo.Schema,
|
|
Host: c.Mongo.Host,
|
|
Database: c.Mongo.Database,
|
|
MaxStaleness: c.Mongo.MaxStaleness,
|
|
MaxPoolSize: c.Mongo.MaxPoolSize,
|
|
MinPoolSize: c.Mongo.MinPoolSize,
|
|
MaxConnIdleTime: c.Mongo.MaxConnIdleTime,
|
|
Compressors: c.Mongo.Compressors,
|
|
EnableStandardReadWriteSplitMode: c.Mongo.EnableStandardReadWriteSplitMode,
|
|
ConnectTimeoutMs: c.Mongo.ConnectTimeoutMs,
|
|
}
|
|
if c.Mongo.User != "" {
|
|
conf.User = c.Mongo.User
|
|
conf.Password = c.Mongo.Password
|
|
}
|
|
|
|
// 快取選項
|
|
cacheOpts := []cache.Option{
|
|
cache.WithExpiry(c.CacheExpireTime),
|
|
cache.WithNotFoundExpiry(c.CacheWithNotFoundExpiry),
|
|
}
|
|
dbOpts := []mon.Option{
|
|
mgo.SetCustomDecimalType(),
|
|
mgo.InitMongoOptions(*conf),
|
|
}
|
|
permRepo := repository.NewPermissionRepository(repository.PermissionRepositoryParam{
|
|
Conf: conf,
|
|
CacheConf: c.Cache,
|
|
CacheOpts: cacheOpts,
|
|
DBOpts: dbOpts,
|
|
})
|
|
|
|
rolePermRepo := repository.NewRolePermissionRepository(repository.RolePermissionRepositoryParam{
|
|
Conf: conf,
|
|
CacheConf: c.Cache,
|
|
CacheOpts: cacheOpts,
|
|
DBOpts: dbOpts,
|
|
})
|
|
|
|
roleRepo := repository.NewRoleRepository(repository.RoleRepositoryParam{
|
|
Conf: conf,
|
|
CacheConf: c.Cache,
|
|
CacheOpts: cacheOpts,
|
|
DBOpts: dbOpts,
|
|
})
|
|
|
|
userRoleRepo := repository.NewUserRoleRepository(repository.UserRoleRepositoryParam{
|
|
Conf: conf,
|
|
CacheConf: c.Cache,
|
|
CacheOpts: cacheOpts,
|
|
DBOpts: dbOpts,
|
|
})
|
|
|
|
puc := uc.NewPermissionUseCase(uc.PermissionUseCaseParam{
|
|
RoleRepo: roleRepo,
|
|
RolePermRepo: rolePermRepo,
|
|
UserRoleRepo: userRoleRepo,
|
|
PermRepo: permRepo,
|
|
})
|
|
rpuc := uc.NewRolePermissionUseCase(uc.RolePermissionUseCaseParam{
|
|
RoleRepo: roleRepo,
|
|
RolePermRepo: rolePermRepo,
|
|
UserRoleRepo: userRoleRepo,
|
|
PermRepo: permRepo,
|
|
PermUseCase: puc,
|
|
AdminRoleUID: c.RoleConfig.AdminRoleUID,
|
|
})
|
|
ruc := uc.NewRoleUseCase(uc.RoleUseCaseParam{
|
|
RoleRepo: roleRepo,
|
|
UserRoleRepo: userRoleRepo,
|
|
Config: uc.RoleUseCaseConfig{
|
|
AdminRoleUID: c.RoleConfig.AdminRoleUID,
|
|
UIDPrefix: c.RoleConfig.UIDPrefix,
|
|
UIDLength: c.RoleConfig.UIDLength,
|
|
},
|
|
RolePermUseCase: rpuc,
|
|
})
|
|
|
|
return PermissionUC{
|
|
PermissionUC: puc,
|
|
RolePermission: rpuc,
|
|
RoleUC: ruc,
|
|
UserRole: uc.NewUserRoleUseCase(uc.UserRoleUseCaseParam{
|
|
UserRoleRepo: userRoleRepo,
|
|
RoleRepo: roleRepo,
|
|
}),
|
|
}
|
|
}
|