all repos

onasty @ 445822dad429b08586716d6fea39fa538f056c51

a one-time notes service

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

Smirnov Oleksandr Smirnov Oleksandr
ss2316544@gmail.com
refactor: deal with TODOs and typos (#30)..., 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
	ErrUserIsAlreeadyVerified  = 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
23
type User struct {
24
	ID          uuid.UUID
25
	Username    string
26
	Email       string
27
	Activated   bool
28
	Password    string
29
	CreatedAt   time.Time
30
	LastLoginAt time.Time
31
}
32
33
func (u User) Validate() error {
34
	_, err := mail.ParseAddress(u.Email)
35
	if err != nil {
36
		return errors.New("user: invalid email") //nolint:err113
37
	}
38
39
	if len(u.Password) < 6 {
40
		return errors.New("user: password too short, minimum 6 chars") //nolint:err113
41
	}
42
43
	if len(u.Username) == 0 {
44
		return errors.New("user: username is required") //nolint:err113
45
	}
46
47
	return nil
48
}