user auth register
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// Request Models
|
||||
type CheckPhoneRequest struct {
|
||||
PhoneNumber string `json:"phone_number" binding:"required"`
|
||||
Password string `json:"password,omitempty"` // Optional - only required if user exists
|
||||
}
|
||||
|
||||
type RegisterStartRequest struct {
|
||||
PhoneNumber string `json:"phone_number" binding:"required"`
|
||||
Name string `json:"name" binding:"required"`
|
||||
BirthDate string `json:"birth_date" binding:"required"`
|
||||
}
|
||||
|
||||
type RegisterVerifyOtpRequest struct {
|
||||
RegistrationToken string `json:"registration_token" binding:"required"`
|
||||
OtpCode string `json:"otp_code" binding:"required"`
|
||||
}
|
||||
|
||||
type RegisterSetPasswordRequest struct {
|
||||
RegistrationToken string `json:"registration_token" binding:"required"`
|
||||
Password string `json:"password" binding:"required,min=8"`
|
||||
ConfirmPassword string `json:"confirm_password" binding:"required"`
|
||||
}
|
||||
|
||||
type CustomerLoginRequest struct {
|
||||
PhoneNumber string `json:"phone_number" binding:"required"`
|
||||
Password string `json:"password" binding:"required"`
|
||||
}
|
||||
|
||||
type ResendOtpRequest struct {
|
||||
PhoneNumber string `json:"phone_number" binding:"required"`
|
||||
Purpose string `json:"purpose" binding:"required,oneof=login registration"`
|
||||
}
|
||||
|
||||
// Response Models
|
||||
type CheckPhoneResponse struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Data *CheckPhoneResponseData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type CheckPhoneResponseData struct {
|
||||
// For NOT_REGISTERED status
|
||||
PhoneNumber string `json:"phone_number,omitempty"`
|
||||
|
||||
// For PASSWORD_REQUIRED status
|
||||
AccessToken string `json:"access_token,omitempty"`
|
||||
RefreshToken string `json:"refresh_token,omitempty"`
|
||||
User *CustomerUserData `json:"user,omitempty"`
|
||||
|
||||
// For OTP_REQUIRED status (if password doesn't exist)
|
||||
OtpToken string `json:"otp_token,omitempty"`
|
||||
ExpiresIn int `json:"expires_in,omitempty"`
|
||||
}
|
||||
|
||||
type RegisterStartResponse struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Data *RegisterStartResponseData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type RegisterStartResponseData struct {
|
||||
RegistrationToken string `json:"registration_token"`
|
||||
OtpToken string `json:"otp_token"`
|
||||
ExpiresIn int `json:"expires_in"`
|
||||
}
|
||||
|
||||
type RegisterVerifyOtpResponse struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Data *RegisterVerifyOtpResponseData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type RegisterVerifyOtpResponseData struct {
|
||||
RegistrationToken string `json:"registration_token"`
|
||||
}
|
||||
|
||||
type RegisterSetPasswordResponse struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Data *RegisterSetPasswordResponseData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type RegisterSetPasswordResponseData struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
User *CustomerUserData `json:"user"`
|
||||
}
|
||||
|
||||
type CustomerUserData struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
Name string `json:"name"`
|
||||
PhoneNumber string `json:"phone_number"`
|
||||
BirthDate string `json:"birth_date"`
|
||||
}
|
||||
|
||||
type CustomerLoginResponse struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Data *CustomerLoginResponseData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type CustomerLoginResponseData struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
User *CustomerUserData `json:"user"`
|
||||
}
|
||||
|
||||
type ResendOtpResponse struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Data *ResendOtpResponseData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type ResendOtpResponseData struct {
|
||||
OtpToken string `json:"otp_token"`
|
||||
ExpiresIn int `json:"expires_in"`
|
||||
NextResendIn int `json:"next_resend_in"` // Seconds until next resend is allowed
|
||||
}
|
||||
|
||||
// Internal structures for OTP and registration tokens
|
||||
type OtpSession struct {
|
||||
Token string `json:"token"`
|
||||
Code string `json:"code"`
|
||||
PhoneNumber string `json:"phone_number"`
|
||||
ExpiresAt time.Time `json:"expires_at"`
|
||||
Purpose string `json:"purpose"` // "login" or "registration"
|
||||
}
|
||||
|
||||
type RegistrationSession struct {
|
||||
Token string `json:"token"`
|
||||
PhoneNumber string `json:"phone_number"`
|
||||
Name string `json:"name"`
|
||||
BirthDate string `json:"birth_date"`
|
||||
ExpiresAt time.Time `json:"expires_at"`
|
||||
Step string `json:"step"` // "otp_sent", "otp_verified", "password_set"
|
||||
}
|
||||
Reference in New Issue
Block a user