niki/service/benefactor/benefactor/service.go

57 lines
1.7 KiB
Go

package benefactorservice
import (
"context"
"time"
"git.gocasts.ir/ebhomengo/niki/entity"
)
type Config struct {
LengthOfOtpCode int `koanf:"length_of_otp_code"`
OtpChars string `koanf:"otp_chars"`
OtpExpireTime time.Duration `koanf:"otp_expire_time"`
}
type Repository interface {
IsExistBenefactorByPhoneNumber(ctx context.Context, phoneNumber string) (bool, entity.Benefactor, error)
CreateBenefactor(ctx context.Context, benefactor entity.Benefactor) (entity.Benefactor, error)
IsExistBenefactorByID(ctx context.Context, id uint) (bool, error)
}
type AuthGenerator interface {
CreateAccessToken(benefactor entity.Benefactor) (string, error)
CreateRefreshToken(benefactor entity.Benefactor) (string, error)
}
type RedisOtp interface {
IsExistPhoneNumber(ctx context.Context, phoneNumber string) (bool, error)
SaveCodeWithPhoneNumber(ctx context.Context, phoneNumber string, code string, expireTime time.Duration) error
GetCodeByPhoneNumber(ctx context.Context, phoneNumber string) (string, error)
DeleteCodeByPhoneNumber(ctx context.Context, phoneNumber string) (bool, error)
}
type SmsProviderClient interface {
SendSms(phoneNumber string, code string) error
}
type Service struct {
config Config
redisOtp RedisOtp
smsProviderClient SmsProviderClient
auth AuthGenerator
repo Repository
}
func New(cfg Config, redisOtp RedisOtp, smsProviderClient SmsProviderClient,
auth AuthGenerator, repo Repository,
) Service {
return Service{
config: cfg,
redisOtp: redisOtp,
smsProviderClient: smsProviderClient,
auth: auth,
repo: repo,
}
}