package domain import "time" // LoginType 登录方式 type LoginType int const ( LoginTypePassword LoginType = 1 // 用户名/邮箱/手机 + 密码 LoginTypeEmailCode LoginType = 2 // 邮箱验证码 LoginTypeSMSCode LoginType = 3 // 手机验证码 LoginTypeOAuth LoginType = 4 // 第三方 OAuth ) // LoginLog 登录日志 type LoginLog struct { ID int64 `gorm:"primaryKey;autoIncrement;index:idx_login_logs_created_at_id,priority:2;index:idx_login_logs_user_created_at,priority:3;index:idx_login_logs_status_created_at_id,priority:3" json:"id"` UserID *int64 `gorm:"index;index:idx_login_logs_user_created_at,priority:1" json:"user_id,omitempty"` LoginType int `gorm:"not null" json:"login_type"` // 1-密码, 2-邮箱验证码, 3-手机验证码, 4-OAuth DeviceID string `gorm:"type:varchar(100)" json:"device_id"` IP string `gorm:"type:varchar(50)" json:"ip"` Location string `gorm:"type:varchar(100)" json:"location"` Status int `gorm:"not null;index:idx_login_logs_status_created_at_id,priority:1" json:"status"` // 0-失败, 1-成功 FailReason string `gorm:"type:varchar(255)" json:"fail_reason,omitempty"` CreatedAt time.Time `gorm:"autoCreateTime;index:idx_login_logs_created_at_id,priority:1;index:idx_login_logs_user_created_at,priority:2;index:idx_login_logs_status_created_at_id,priority:2" json:"created_at"` } // TableName 指定表名 func (LoginLog) TableName() string { return "login_logs" }