56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
|
|
package usecase
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
redislib "gateway/internal/library/redis"
|
||
|
|
memberconfig "gateway/internal/model/member/config"
|
||
|
|
domrepo "gateway/internal/model/member/domain/repository"
|
||
|
|
domusecase "gateway/internal/model/member/domain/usecase"
|
||
|
|
"gateway/internal/model/member/repository"
|
||
|
|
domnotif "gateway/internal/model/notification/domain/usecase"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Module bundles member use cases.
|
||
|
|
type Module struct {
|
||
|
|
OTP domusecase.OTPUseCase
|
||
|
|
Verification domusecase.VerificationUseCase
|
||
|
|
}
|
||
|
|
|
||
|
|
// ModuleParam wires member module dependencies.
|
||
|
|
type ModuleParam struct {
|
||
|
|
Redis *redislib.Client
|
||
|
|
Notifier domnotif.NotifierUseCase
|
||
|
|
Config memberconfig.Config
|
||
|
|
Profile domrepo.ProfileRepository // optional; defaults to memory
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewModuleFromParam builds member use cases.
|
||
|
|
func NewModuleFromParam(param ModuleParam) (*Module, error) {
|
||
|
|
if param.Redis == nil || param.Redis.Zero() == nil {
|
||
|
|
return nil, fmt.Errorf("member: redis is required")
|
||
|
|
}
|
||
|
|
if param.Notifier == nil {
|
||
|
|
return nil, fmt.Errorf("member: notifier is required")
|
||
|
|
}
|
||
|
|
|
||
|
|
otpStore := repository.NewRedisOTPChallengeStore(param.Redis)
|
||
|
|
rateStore := repository.NewRedisVerifyRateStore(param.Redis)
|
||
|
|
profile := param.Profile
|
||
|
|
if profile == nil {
|
||
|
|
profile = repository.NewMemoryProfileRepository()
|
||
|
|
}
|
||
|
|
|
||
|
|
cfg := param.Config.Defaults()
|
||
|
|
otpUC := MustOTPUseCase(OTPUseCaseParam{Store: otpStore, Config: cfg})
|
||
|
|
verificationUC := MustVerificationUseCase(VerificationUseCaseParam{
|
||
|
|
OTP: otpUC,
|
||
|
|
Notifier: param.Notifier,
|
||
|
|
Profile: profile,
|
||
|
|
Rates: rateStore,
|
||
|
|
Config: cfg,
|
||
|
|
})
|
||
|
|
|
||
|
|
return &Module{OTP: otpUC, Verification: verificationUC}, nil
|
||
|
|
}
|