Files
doc_ai_backed/internal/model/user/user.go
yoge f594a3e9fb feat: add email verify code endpoint and require code on register
- POST /v1/user/email/code sends a 6-digit verify code via email (rate-limited, 10min TTL)
- RegisterByEmail now validates verify_code before creating the account
- Added email code cache helpers mirroring SMS pattern
- Added error codes 1007 (email code error) and 1008 (send limit)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 09:50:23 +08:00

80 lines
1.9 KiB
Go

package model
type SmsSendRequest struct {
Phone string `json:"phone" binding:"required"`
}
type SmsSendResponse struct {
Code string `json:"code"`
}
type PhoneLoginRequest struct {
Phone string `json:"phone" binding:"required"`
Code string `json:"code" binding:"required"`
}
type PhoneLoginResponse struct {
Token string `json:"token"`
ExpiresAt int64 `json:"expires_at"`
}
type UserInfoResponse struct {
Username string `json:"username"`
Email string `json:"email"`
}
type EmailVerifyCodeRequest struct {
Email string `json:"email" binding:"required,email"`
}
type EmailVerifyCodeResponse struct{}
type EmailRegisterRequest struct {
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required,min=6"`
VerifyCode string `json:"verify_code" binding:"required"`
}
type EmailRegisterResponse struct {
Token string `json:"token"`
ExpiresAt int64 `json:"expires_at"`
}
type EmailLoginRequest struct {
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required"`
}
type EmailLoginResponse struct {
Token string `json:"token"`
ExpiresAt int64 `json:"expires_at"`
}
type GoogleAuthUrlRequest struct {
RedirectURI string `form:"redirect_uri" binding:"required"`
State string `form:"state" binding:"required"`
}
type GoogleAuthUrlResponse struct {
AuthURL string `json:"auth_url"`
}
type GoogleOAuthCallbackRequest struct {
Code string `json:"code" binding:"required"`
State string `json:"state" binding:"required"`
RedirectURI string `json:"redirect_uri" binding:"required"`
}
type GoogleOAuthCallbackResponse struct {
Token string `json:"token"`
ExpiresAt int64 `json:"expires_at"`
}
type GoogleUserInfo struct {
ID string `json:"id"`
Email string `json:"email"`
Name string `json:"name"`
Picture string `json:"picture"`
VerifiedEmail bool `json:"verified_email"`
}