all repos

onasty @ 5495cb456caa00f4564d1c1eed06a766811debaf

a one-time notes service

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

Smirnov Oleksandr Smirnov Oleksandr
ss2316544@gmail.com
refactor: fix annoyances (#97)..., 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
	ErrVerificationTokenNotFound = errors.New("user: verification token not found")
17
	ErrUserIsNotActivated        = errors.New("user: user is not activated")
18
19
	ErrUserNotFound         = errors.New("user: not found")
20
	ErrUserWrongCredentials = errors.New("user: wrong credentials")
21
22
	ErrUserInvalidEmail    = errors.New("user: invalid email")
23
	ErrUserInvalidPassword = errors.New("user: password too short, minimum 6 chars")
24
	ErrUserInvalidUsername = errors.New("user: username is required")
25
)
26
27
type User struct {
28
	ID          uuid.UUID
29
	Username    string
30
	Email       string
31
	Activated   bool
32
	Password    string
33
	CreatedAt   time.Time
34
	LastLoginAt time.Time
35
}
36
37
func (u User) Validate() error {
38
	_, err := mail.ParseAddress(u.Email)
39
	if err != nil {
40
		return ErrUserInvalidEmail
41
	}
42
43
	if len(u.Password) < 6 {
44
		return ErrUserInvalidPassword
45
	}
46
47
	if len(u.Username) == 0 {
48
		return ErrUserInvalidUsername
49
	}
50
51
	return nil
52
}
53
54
func (u User) IsActivated() bool {
55
	return u.Activated
56
}