user auth register
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"apskel-pos-be/internal/contract"
|
||||
"apskel-pos-be/internal/models"
|
||||
"apskel-pos-be/internal/processor"
|
||||
)
|
||||
|
||||
type CustomerAuthService interface {
|
||||
CheckPhoneNumber(ctx context.Context, req *contract.CheckPhoneRequest) (*models.CheckPhoneResponse, error)
|
||||
StartRegistration(ctx context.Context, req *contract.RegisterStartRequest) (*models.RegisterStartResponse, error)
|
||||
VerifyOtp(ctx context.Context, req *contract.RegisterVerifyOtpRequest) (*models.RegisterVerifyOtpResponse, error)
|
||||
SetPassword(ctx context.Context, req *contract.RegisterSetPasswordRequest) (*models.RegisterSetPasswordResponse, error)
|
||||
Login(ctx context.Context, req *contract.CustomerLoginRequest) (*models.CustomerLoginResponse, error)
|
||||
ResendOtp(ctx context.Context, req *contract.ResendOtpRequest) (*models.ResendOtpResponse, error)
|
||||
}
|
||||
|
||||
type customerAuthService struct {
|
||||
customerAuthProcessor processor.CustomerAuthProcessor
|
||||
}
|
||||
|
||||
func NewCustomerAuthService(customerAuthProcessor processor.CustomerAuthProcessor) CustomerAuthService {
|
||||
return &customerAuthService{
|
||||
customerAuthProcessor: customerAuthProcessor,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *customerAuthService) CheckPhoneNumber(ctx context.Context, req *contract.CheckPhoneRequest) (*models.CheckPhoneResponse, error) {
|
||||
// Validate request
|
||||
if req.PhoneNumber == "" {
|
||||
return nil, fmt.Errorf("phone number is required")
|
||||
}
|
||||
|
||||
response, err := s.customerAuthProcessor.CheckPhoneNumber(ctx, req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to check phone number: %w", err)
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s *customerAuthService) StartRegistration(ctx context.Context, req *contract.RegisterStartRequest) (*models.RegisterStartResponse, error) {
|
||||
// Validate request
|
||||
if req.PhoneNumber == "" {
|
||||
return nil, fmt.Errorf("phone number is required")
|
||||
}
|
||||
if req.Name == "" {
|
||||
return nil, fmt.Errorf("name is required")
|
||||
}
|
||||
if req.BirthDate == "" {
|
||||
return nil, fmt.Errorf("birth date is required")
|
||||
}
|
||||
|
||||
response, err := s.customerAuthProcessor.StartRegistration(ctx, req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to start registration: %w", err)
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s *customerAuthService) VerifyOtp(ctx context.Context, req *contract.RegisterVerifyOtpRequest) (*models.RegisterVerifyOtpResponse, error) {
|
||||
// Validate request
|
||||
if req.RegistrationToken == "" {
|
||||
return nil, fmt.Errorf("registration token is required")
|
||||
}
|
||||
if req.OtpCode == "" {
|
||||
return nil, fmt.Errorf("OTP code is required")
|
||||
}
|
||||
|
||||
response, err := s.customerAuthProcessor.VerifyOtp(ctx, req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to verify OTP: %w", err)
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s *customerAuthService) SetPassword(ctx context.Context, req *contract.RegisterSetPasswordRequest) (*models.RegisterSetPasswordResponse, error) {
|
||||
// Validate request
|
||||
if req.RegistrationToken == "" {
|
||||
return nil, fmt.Errorf("registration token is required")
|
||||
}
|
||||
if req.Password == "" {
|
||||
return nil, fmt.Errorf("password is required")
|
||||
}
|
||||
if req.ConfirmPassword == "" {
|
||||
return nil, fmt.Errorf("confirm password is required")
|
||||
}
|
||||
|
||||
// Validate password strength
|
||||
if len(req.Password) < 8 {
|
||||
return nil, fmt.Errorf("password must be at least 8 characters long")
|
||||
}
|
||||
|
||||
response, err := s.customerAuthProcessor.SetPassword(ctx, req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to set password: %w", err)
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s *customerAuthService) Login(ctx context.Context, req *contract.CustomerLoginRequest) (*models.CustomerLoginResponse, error) {
|
||||
// Validate request
|
||||
if req.PhoneNumber == "" {
|
||||
return nil, fmt.Errorf("phone number is required")
|
||||
}
|
||||
if req.Password == "" {
|
||||
return nil, fmt.Errorf("password is required")
|
||||
}
|
||||
|
||||
response, err := s.customerAuthProcessor.Login(ctx, req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to login: %w", err)
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (s *customerAuthService) ResendOtp(ctx context.Context, req *contract.ResendOtpRequest) (*models.ResendOtpResponse, error) {
|
||||
return s.customerAuthProcessor.ResendOtp(ctx, req)
|
||||
}
|
||||
Reference in New Issue
Block a user