30 lines
1.4 KiB
Go
30 lines
1.4 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// User represents an agent/admin user in the system.
|
|
type User struct {
|
|
Base
|
|
AccountID uint `gorm:"index;not null" json:"account_id"`
|
|
Name string `gorm:"size:255;not null" json:"name"`
|
|
Email string `gorm:"size:255;uniqueIndex;not null" json:"email"`
|
|
Password string `gorm:"size:255;not null" json:"-"` // hashed password (bcrypt)
|
|
PasswordDigest string `gorm:"size:255" json:"-"` // alias used by auth service
|
|
Provider string `gorm:"size:50;default:email" json:"provider"` // email, google, saml
|
|
UID string `gorm:"size:255" json:"uid,omitempty"` // external ID for OAuth providers
|
|
AvatarURL string `gorm:"size:512" json:"avatar_url"`
|
|
Role string `gorm:"size:50;default:agent" json:"role"` // agent, admin
|
|
Active bool `gorm:"default:true" json:"active"`
|
|
Available bool `gorm:"default:false" json:"available"`
|
|
TOTPSecret string `gorm:"size:255" json:"totp_secret,omitempty"`
|
|
TOTPEnabled bool `gorm:"default:false" json:"totp_enabled"`
|
|
CustomRoleID *uint `gorm:"index" json:"custom_role_id,omitempty"`
|
|
SignInCount int `gorm:"default:0" json:"sign_in_count"`
|
|
ConfirmedAt *time.Time `json:"confirmed_at,omitempty"`
|
|
LastSignInAt *time.Time `json:"last_sign_in_at,omitempty"`
|
|
CurrentSignInAt *time.Time `json:"current_sign_in_at,omitempty"`
|
|
}
|
|
|
|
func (User) TableName() string { return "users" } |