-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
auth_user_details.go
160 lines (130 loc) Β· 5.49 KB
/
auth_user_details.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package entity
import (
"fmt"
"strings"
"time"
"github.com/photoprism/photoprism/pkg/clean"
"github.com/photoprism/photoprism/pkg/rnd"
)
const (
GenderMale = "male"
GenderFemale = "female"
GenderOther = "other"
)
// UserDetails represents user profile information.
type UserDetails struct {
UserUID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"-" yaml:"-"`
SubjUID string `gorm:"type:VARBINARY(42);index;" json:"SubjUID,omitempty" yaml:"SubjUID,omitempty"`
SubjSrc string `gorm:"type:VARBINARY(8);default:'';" json:"-" yaml:"SubjSrc,omitempty"`
PlaceID string `gorm:"type:VARBINARY(42);index;default:'zz'" json:"-" yaml:"-"`
PlaceSrc string `gorm:"type:VARBINARY(8);" json:"-" yaml:"PlaceSrc,omitempty"`
CellID string `gorm:"type:VARBINARY(42);index;default:'zz'" json:"-" yaml:"CellID,omitempty"`
BirthYear int `json:"BirthYear" yaml:"BirthYear,omitempty"`
BirthMonth int `json:"BirthMonth" yaml:"BirthMonth,omitempty"`
BirthDay int `json:"BirthDay" yaml:"BirthDay,omitempty"`
NameTitle string `gorm:"size:32;" json:"NameTitle" yaml:"NameTitle,omitempty"`
GivenName string `gorm:"size:64;" json:"GivenName" yaml:"GivenName,omitempty"`
MiddleName string `gorm:"size:64;" json:"MiddleName" yaml:"MiddleName,omitempty"`
FamilyName string `gorm:"size:64;" json:"FamilyName" yaml:"FamilyName,omitempty"`
NameSuffix string `gorm:"size:32;" json:"NameSuffix" yaml:"NameSuffix,omitempty"`
NickName string `gorm:"size:64;" json:"NickName" yaml:"NickName,omitempty"`
NameSrc string `gorm:"type:VARBINARY(8);" json:"NameSrc" yaml:"NameSrc,omitempty"`
UserGender string `gorm:"size:16;" json:"Gender" yaml:"Gender,omitempty"`
UserAbout string `gorm:"size:512;" json:"About" yaml:"About,omitempty"`
UserBio string `gorm:"size:2048;" json:"Bio" yaml:"Bio,omitempty"`
UserLocation string `gorm:"size:512;" json:"Location" yaml:"Location,omitempty"`
UserCountry string `gorm:"type:VARBINARY(2);" json:"Country" yaml:"Country,omitempty"`
UserPhone string `gorm:"size:32;" json:"Phone" yaml:"Phone,omitempty"`
SiteURL string `gorm:"type:VARBINARY(512);column:site_url" json:"SiteURL" yaml:"SiteURL,omitempty"`
ProfileURL string `gorm:"type:VARBINARY(512);column:profile_url" json:"ProfileURL" yaml:"ProfileURL,omitempty"`
FeedURL string `gorm:"type:VARBINARY(512);column:feed_url" json:"FeedURL,omitempty" yaml:"FeedURL,omitempty"`
AvatarURL string `gorm:"type:VARBINARY(512);column:avatar_url" json:"AvatarURL,omitempty" yaml:"AvatarURL,omitempty"`
OrgTitle string `gorm:"size:64;" json:"OrgTitle" yaml:"OrgTitle,omitempty"`
OrgName string `gorm:"size:128;" json:"OrgName" yaml:"OrgName,omitempty"`
OrgEmail string `gorm:"size:255;index;" json:"OrgEmail" yaml:"OrgEmail,omitempty"`
OrgPhone string `gorm:"size:32;" json:"OrgPhone" yaml:"OrgPhone,omitempty"`
OrgURL string `gorm:"type:VARBINARY(512);column:org_url" json:"OrgURL" yaml:"OrgURL,omitempty"`
IdURL string `gorm:"type:VARBINARY(512);column:id_url;" json:"IdURL,omitempty" yaml:"IdURL,omitempty"`
CreatedAt time.Time `json:"CreatedAt" yaml:"-"`
UpdatedAt time.Time `json:"UpdatedAt" yaml:"-"`
}
// TableName returns the entity table name.
func (UserDetails) TableName() string {
return "auth_users_details"
}
// NewUserDetails creates new user details.
func NewUserDetails(uid string) *UserDetails {
return &UserDetails{UserUID: uid}
}
// CreateUserDetails creates new user details or returns nil on error.
func CreateUserDetails(user *User) error {
if user == nil {
return fmt.Errorf("user is nil")
}
if user.GetUID() == "" {
return fmt.Errorf("empty user uid")
}
user.UserDetails = NewUserDetails(user.GetUID())
if err := Db().Where("user_uid = ?", user.GetUID()).First(user.UserDetails).Error; err == nil {
return nil
}
return user.UserDetails.Create()
}
// HasID tests if the entity has a valid uid.
func (m *UserDetails) HasID() bool {
return rnd.IsUID(m.UserUID, UserUID)
}
// Create new entity in the database.
func (m *UserDetails) Create() error {
return Db().Create(m).Error
}
// Save updates the record in the database or inserts a new record if it does not already exist.
func (m *UserDetails) Save() error {
return Db().Save(m).Error
}
// Updates multiple properties in the database.
func (m *UserDetails) Updates(values interface{}) error {
return UnscopedDb().Model(m).Updates(values).Error
}
// DisplayName returns a display name based on the user details.
func (m *UserDetails) DisplayName() string {
if m == nil {
return ""
}
n := make([]string, 0, 3)
// Add title if exists.
if m.NameTitle != "" {
n = append(n, m.NameTitle)
}
// Add given name if exists.
if m.GivenName != "" {
n = append(n, m.GivenName)
}
// Add family name if exists.
if m.FamilyName != "" {
n = append(n, m.FamilyName)
}
// Default to nick name.
if len(n) == 0 {
return m.NickName
}
return strings.Join(n, " ")
}
// SetGivenName updates the user's given name.
func (m *UserDetails) SetGivenName(name string) *UserDetails {
name = clean.Name(name)
if name == "" || SrcPriority[SrcAuto] < SrcPriority[m.NameSrc] {
return m
}
m.GivenName = name
return m
}
// SetFamilyName updates the user's family name.
func (m *UserDetails) SetFamilyName(name string) *UserDetails {
name = clean.Name(name)
if name == "" || SrcPriority[SrcAuto] < SrcPriority[m.NameSrc] {
return m
}
m.FamilyName = name
return m
}