forked from ebhomengo/niki
77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
|
)
|
|
|
|
type Config struct {
|
|
LengthOfOtpCode int `koanf:"length_of_otp_code"`
|
|
OtpChars string `koanf:"otp_chars"`
|
|
OtpExpireTime time.Duration `koanf:"otp_expire_time"`
|
|
}
|
|
|
|
type AccountClient interface {
|
|
SendOTP(ctx context.Context, phoneNumber string) error
|
|
LoginOrRegister(ctx context.Context, req LoginOrRegisterRequest) (LoginOrRegisterResponse, error)
|
|
}
|
|
|
|
type AuthClient interface {
|
|
CreateAccessToken()
|
|
CreateRefreshToken()
|
|
}
|
|
|
|
type Service struct {
|
|
config Config
|
|
accountClient AccountClient
|
|
validator Validator
|
|
}
|
|
|
|
func NewService(cfg Config,
|
|
accountClient AccountClient,
|
|
validator Validator) Service {
|
|
return Service{
|
|
config: cfg,
|
|
accountClient: accountClient,
|
|
validator: validator,
|
|
}
|
|
}
|
|
|
|
func (s Service) SendOtp(ctx context.Context, req SendOtpRequest) (SendOtpResponse, error) {
|
|
const op = "driverService.SendOtp"
|
|
err := s.validator.ValidateSendOtpRequest(req)
|
|
if err != nil {
|
|
return SendOtpResponse{}, richerror.New(op).WithErr(err).WithMessage(err.Error())
|
|
}
|
|
|
|
sErr := s.accountClient.SendOTP(ctx, req.PhoneNumber)
|
|
if sErr != nil {
|
|
return SendOtpResponse{}, richerror.New(op).WithErr(sErr).WithMessage(sErr.Error())
|
|
}
|
|
|
|
return SendOtpResponse{}, nil
|
|
}
|
|
|
|
func (s Service) LoginOrRegister(ctx context.Context, req LoginOrRegisterRequest) (LoginOrRegisterResponse, error) {
|
|
const op = "driverService.LoginOrRegister"
|
|
|
|
err := s.validator.ValidateLoginOrRegisterRequest(req)
|
|
if err != nil {
|
|
return LoginOrRegisterResponse{}, richerror.New(op).WithErr(err).WithMessage(err.Error())
|
|
}
|
|
|
|
resp, lErr := s.accountClient.LoginOrRegister(ctx, req)
|
|
if lErr != nil {
|
|
return LoginOrRegisterResponse{}, err
|
|
}
|
|
|
|
fmt.Println("res:", resp)
|
|
|
|
// TODO : CreateAccessToken and create CreateRefreshToken
|
|
|
|
return LoginOrRegisterResponse{}, nil
|
|
}
|