all repos

onasty @ 9f4dd4beef61d8ada28beac0547d46b7d5a9ec13

a one-time notes service

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

Smirnov Oleksandr Smirnov Oleksandr
ss2316544@gmail.com
refactor: remove `username` (#112)..., 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
	ErrUserIsAlreadyVerified   = errors.New("user: user is already verified")
14
15
	ErrResetPasswordTokenAlreadyUsed = errors.New("reset password token is already used")
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
)
25
26
type User struct {
27
	ID          uuid.UUID
28
	Email       string
29
	Activated   bool
30
	Password    string
31
	CreatedAt   time.Time
32
	LastLoginAt time.Time
33
}
34
35
func (u User) Validate() error {
36
	_, err := mail.ParseAddress(u.Email)
37
	if err != nil {
38
		return ErrUserInvalidEmail
39
	}
40
41
	return u.ValidatePassword()
42
}
43
44
func (u User) ValidatePassword() error {
45
	if len(u.Password) < 6 {
46
		return ErrUserInvalidPassword
47
	}
48
	return nil
49
}
50
51
func (u User) IsActivated() bool {
52
	return u.Activated
53
}