all repos

onasty @ c5b3657

a one-time notes service

onasty/internal/models/user.go (view raw)

Smirnov Oleksandr Smirnov Oleksandr
ss2316544@gmail.com
feat: reset password (#110)..., 1 year ago
1
package models
2
3
import (
4
	"errors"
5
	"net/mail"
6
	"time"
7
8
	"github.com/gofrs/uuid/v5"
9
)
10
11
var (
12
	ErrUserEmailIsAlreadyInUse = errors.New("user: email is already in use")
13
	ErrUsernameIsAlreadyInUse  = errors.New("user: username is already in use")
14
	ErrUserIsAlreadyVerified   = errors.New("user: user is already verified")
15
16
	ErrResetPasswordTokenAlreadyUsed = errors.New("reset password token is already used")
17
	ErrVerificationTokenNotFound     = errors.New("user: verification token not found")
18
	ErrUserIsNotActivated            = errors.New("user: user is not activated")
19
20
	ErrUserNotFound         = errors.New("user: not found")
21
	ErrUserWrongCredentials = errors.New("user: wrong credentials")
22
23
	ErrUserInvalidEmail    = errors.New("user: invalid email")
24
	ErrUserInvalidPassword = errors.New("user: password too short, minimum 6 chars")
25
	ErrUserInvalidUsername = errors.New("user: username is required")
26
)
27
28
type User struct {
29
	ID          uuid.UUID
30
	Username    string
31
	Email       string
32
	Activated   bool
33
	Password    string
34
	CreatedAt   time.Time
35
	LastLoginAt time.Time
36
}
37
38
func (u User) Validate() error {
39
	_, err := mail.ParseAddress(u.Email)
40
	if err != nil {
41
		return ErrUserInvalidEmail
42
	}
43
44
	if len(u.Username) == 0 {
45
		return ErrUserInvalidUsername
46
	}
47
48
	return u.ValidatePassword()
49
}
50
51
func (u User) ValidatePassword() error {
52
	if len(u.Password) < 6 {
53
		return ErrUserInvalidPassword
54
	}
55
	return nil
56
}
57
58
func (u User) IsActivated() bool {
59
	return u.Activated
60
}