f37c1ac19b
- Send verification email before creating user to prevent orphaned accounts - Detect SMTP authentication errors and fail fast without retries - Add field-level validation errors for better frontend UX - Configure docker-compose with explicit environment variables - Document dollar sign escaping in .env.example (use $$) - Implement welcome email on successful verification - Clean up unnecessary comments
41 lines
728 B
Go
41 lines
728 B
Go
package entities
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type PasswordResetToken struct {
|
|
ID string
|
|
UserID string
|
|
Token string
|
|
ExpiresAt time.Time
|
|
UsedAt *time.Time
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
func NewPasswordResetToken(userID, token string, expiresAt time.Time) *PasswordResetToken {
|
|
return &PasswordResetToken{
|
|
ID: uuid.NewString(),
|
|
UserID: userID,
|
|
Token: token,
|
|
ExpiresAt: expiresAt,
|
|
UsedAt: nil,
|
|
CreatedAt: time.Now(),
|
|
}
|
|
}
|
|
|
|
func (t *PasswordResetToken) IsExpired() bool {
|
|
return time.Now().After(t.ExpiresAt)
|
|
}
|
|
|
|
func (t *PasswordResetToken) IsUsed() bool {
|
|
return t.UsedAt != nil
|
|
}
|
|
|
|
func (t *PasswordResetToken) MarkAsUsed() {
|
|
now := time.Now()
|
|
t.UsedAt = &now
|
|
}
|