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" }