package domain import ( "errors" "time" "github.com/google/uuid" ) type User struct { ID uuid.UUID `json:"id"` Email string `json:"email"` Name string `json:"name"` PasswordHash string `json:"-"` EmailVerified bool `json:"email_verified"` EmailVerifiedAt *time.Time `json:"email_verified_at,omitempty"` DeletedAt *time.Time `json:"-"` TermsAcceptedAt *time.Time `json:"terms_accepted_at,omitempty"` PrivacyPolicyAcceptedAt *time.Time `json:"privacy_policy_accepted_at,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // TermsAccepted reports whether the user has accepted both the terms // of service and the privacy policy. Both must be present for the user // to use the dashboard once enforcement is enabled. func (u *User) TermsAccepted() bool { return u != nil && u.TermsAcceptedAt != nil && u.PrivacyPolicyAcceptedAt != nil } var ( ErrUserNotFound = errors.New("user not found") ErrEmailTaken = errors.New("email already in use") ErrEmailNotVerified = errors.New("email not verified") ErrAuthTokenNotFound = errors.New("auth token not found") ErrAuthTokenConsumed = errors.New("auth token already used") ErrAuthTokenExpired = errors.New("auth token expired") ErrRefreshTokenRevoked = errors.New("refresh token revoked") ErrAccountLocked = errors.New("account locked due to too many failed login attempts") )