f5a8c5a45d
Signed-off-by: Michael Mayer <michael@photoprism.app>
98 lines
4.3 KiB
Go
98 lines
4.3 KiB
Go
package entity
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/photoprism/photoprism/pkg/rnd"
|
|
)
|
|
|
|
const (
|
|
GenderMale = "male"
|
|
GenderFemale = "female"
|
|
GenderOther = "other"
|
|
GenderUnknown = ""
|
|
)
|
|
|
|
// UserDetails represents user profile information.
|
|
type UserDetails struct {
|
|
UserUID string `gorm:"type:VARBINARY(64);primary_key;auto_increment:false;" json:"-" yaml:"UserUID"`
|
|
SubjUID string `gorm:"type:VARBINARY(64);index;" json:"SubjUID,omitempty" yaml:"SubjUID,omitempty"`
|
|
SubjSrc string `gorm:"type:VARBINARY(8);default:'';" json:"SubjSrc,omitempty" yaml:"SubjSrc,omitempty"`
|
|
PlaceID string `gorm:"type:VARBINARY(64);index;default:'zz'" json:"PlaceID,omitempty" yaml:"-"`
|
|
PlaceSrc string `gorm:"type:VARBINARY(8);" json:"PlaceSrc,omitempty" yaml:"PlaceSrc,omitempty"`
|
|
CellID string `gorm:"type:VARBINARY(64);index;default:'zz'" json:"CellID,omitempty" yaml:"CellID,omitempty"`
|
|
IdURL string `gorm:"type:VARBINARY(512);column:id_url;" json:"IdURL,omitempty" yaml:"IdURL,omitempty"`
|
|
AvatarURL string `gorm:"type:VARBINARY(512);column:avatar_url" json:"AvatarURL,omitempty" yaml:"AvatarURL,omitempty"`
|
|
SiteURL string `gorm:"type:VARBINARY(512);column:site_url" json:"SiteURL,omitempty" yaml:"SiteURL,omitempty"`
|
|
FeedURL string `gorm:"type:VARBINARY(512);column:feed_url" json:"FeedURL,omitempty" yaml:"FeedURL,omitempty"`
|
|
UserGender string `gorm:"size:16;" json:"Gender,omitempty" yaml:"Gender,omitempty"`
|
|
NamePrefix string `gorm:"size:32;" json:"NamePrefix,omitempty" yaml:"NamePrefix,omitempty"`
|
|
GivenName string `gorm:"size:64;" json:"GivenName,omitempty" yaml:"GivenName,omitempty"`
|
|
MiddleName string `gorm:"size:64;" json:"MiddleName,omitempty" yaml:"MiddleName,omitempty"`
|
|
FamilyName string `gorm:"size:64;" json:"FamilyName,omitempty" yaml:"FamilyName,omitempty"`
|
|
NameSuffix string `gorm:"size:32;" json:"NameSuffix,omitempty" yaml:"NameSuffix,omitempty"`
|
|
NickName string `gorm:"size:64;" json:"NickName,omitempty" yaml:"NickName,omitempty"`
|
|
UserPhone string `gorm:"size:32;" json:"Phone,omitempty" yaml:"Phone,omitempty"`
|
|
UserAddress string `gorm:"size:512;" json:"Address,omitempty" yaml:"Address,omitempty"`
|
|
UserCountry string `gorm:"type:VARBINARY(2);" json:"Country,omitempty" yaml:"Country,omitempty"`
|
|
UserBio string `gorm:"size:512;" json:"Bio,omitempty" yaml:"Bio,omitempty"`
|
|
JobTitle string `gorm:"size:64;" json:"JobTitle,omitempty" yaml:"JobTitle,omitempty"`
|
|
Department string `gorm:"size:128;" json:"Department,omitempty" yaml:"Department,omitempty"`
|
|
Company string `gorm:"size:128;" json:"Company,omitempty" yaml:"Company,omitempty"`
|
|
CompanyURL string `gorm:"type:VARBINARY(512);column:company_url" json:"CompanyURL,omitempty" yaml:"CompanyURL,omitempty"`
|
|
BirthYear int `gorm:"default:-1;" json:"BirthYear,omitempty" yaml:"BirthYear,omitempty"`
|
|
BirthMonth int `gorm:"default:-1;" json:"BirthMonth,omitempty" yaml:"BirthMonth,omitempty"`
|
|
BirthDay int `gorm:"default:-1;" json:"BirthDay,omitempty" yaml:"BirthDay,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_dev"
|
|
}
|
|
|
|
// 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.UID() == "" {
|
|
return fmt.Errorf("empty user uid")
|
|
}
|
|
|
|
user.UserDetails = NewUserDetails(user.UID())
|
|
|
|
if err := Db().Where("user_uid = ?", user.UID()).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 entity properties.
|
|
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
|
|
}
|