Passed
Push — main ( f6597a...58b626 )
by Yume
01:31 queued 12s
created

domain.*User.HasPermission   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
package domain
2
3
import (
4
	"github.com/go-playground/validator/v10"
5
	"gorm.io/gorm"
6
)
7
8
type User struct {
9
	gorm.Model    `swaggerignore:"true"`
10
	Username      string     `json:"username"`
11
	Email         string     `json:"email" validate:"email" gorm:"unique"`
12
	Password      string     `json:"-"`
13
	Avatar        string     `json:"avatar"`
14
	OauthProvider string     `json:"oauth_provider" `
15
	OauthID       string     `json:"oauth_id" gorm:"unique"`
16
	Learning      []*Deck    `json:"learning" gorm:"many2many:user_decks;"`
17
	OwnDecks      []Deck     `json:"own_decks" gorm:"foreignKey:OwnerID"`
18
	Permission    Permission `json:"permission"`
19
	Oauth         bool       `json:"oauth" gorm:"default:false"`
20
}
21
22
func (u *User) ToPublicUser() PublicUser {
23
	return PublicUser{
24
		ID:         u.ID,
25
		Username:   u.Username,
26
		Email:      u.Email,
27
		Avatar:     u.Avatar,
28
		Permission: u.Permission,
29
	}
30
}
31
32
func (u *User) Validate() error {
33
	validate := validator.New()
34
	return validate.Struct(u)
35
}
36
37
func (u *User) HasPermission(permission Permission) bool {
38
	return u.Permission >= permission
39
}
40
41
type PublicUser struct {
42
	Username   string     `json:"username"`
43
	Email      string     `json:"email"`
44
	Avatar     string     `json:"avatar"`
45
	ID         uint       `json:"id"`
46
	Permission Permission `json:"permission"`
47
}
48
49
type Login struct {
50
	Email    string `json:"email" validate:"email"` // Email of the user
51
	Password string `json:"password"`               // Password of the user
52
}
53
54
type Register struct {
55
	Username string `json:"username" validate:"required"` // Username of the user
56
	Email    string `json:"email" validate:"email"`       // Email of the user
57
	Password string `json:"password" validate:"required"` // Password of the user
58
}
59
60
func (r *Register) Validate() error {
61
	validate := validator.New()
62
	return validate.Struct(r)
63
}
64
65
func (r *Register) ToUser() User {
66
	return User{
67
		Username:   r.Username,
68
		Email:      r.Email,
69
		Password:   r.Password,
70
		Permission: PermissionUser,
71
	}
72
}
73