Files
goalfylearning-admin/internal/models/common.go

105 lines
3.3 KiB
Go

package models
import (
"time"
"gorm.io/gorm"
)
// BaseModel 基础模型,包含公共字段
type BaseModel struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"deletedAt,omitempty"`
}
// User 用户模型
type User struct {
BaseModel
Username string `gorm:"uniqueIndex;size:50;not null" json:"username"`
Email string `gorm:"uniqueIndex;size:100;not null" json:"email"`
Nickname string `gorm:"size:50" json:"nickname"`
Avatar string `gorm:"size:255" json:"avatar"`
Status int `gorm:"default:1;comment:状态 1:正常 0:禁用" json:"status"`
SSOProvider string `gorm:"size:50;not null;comment:SSO提供商" json:"ssoProvider"`
LastLoginAt *time.Time `gorm:"comment:最后登录时间" json:"lastLoginAt"`
LoginCount int `gorm:"default:0;comment:登录次数" json:"loginCount"`
RoleID uint `gorm:"not null;default:0;comment:角色ID" json:"roleId"`
}
// UserWithRoles 带角色信息的用户模型
type UserWithRoles struct {
User
Role *Role `json:"role,omitempty"`
}
// Role 角色模型
type Role struct {
BaseModel
Name string `gorm:"uniqueIndex;size:50;not null" json:"name"`
Level int `gorm:"uniqueIndex;not null" json:"level"`
Description string `gorm:"type:text" json:"description"`
IsDefault bool `gorm:"default:false" json:"isDefault"`
}
// SystemConfig 系统配置模型
type SystemConfig struct {
BaseModel
Key string `gorm:"uniqueIndex;size:100;not null" json:"key"`
Name string `gorm:"size:100;not null" json:"name"`
Value string `gorm:"type:text" json:"value"`
Type string `gorm:"size:20;default:string" json:"type"` // string, int, bool, json
Desc string `gorm:"size:255" json:"desc"`
Status int `gorm:"default:1" json:"status"` // 1:启用 0:禁用
}
// LoginLog 登录日志模型
type LoginLog struct {
BaseModel
UserID uint `gorm:"not null" json:"userId"`
Username string `gorm:"size:50;not null" json:"username"`
IP string `gorm:"size:45" json:"ip"`
UserAgent string `gorm:"size:500" json:"userAgent"`
Status int `gorm:"default:1" json:"status"` // 1:成功 0:失败
Message string `gorm:"size:255" json:"message"`
}
// OperationLog 操作日志模型
type OperationLog struct {
BaseModel
UserID uint `gorm:"not null" json:"userId"`
Username string `gorm:"size:50;not null" json:"username"`
Module string `gorm:"size:50" json:"module"`
Operation string `gorm:"size:50" json:"operation"`
Method string `gorm:"size:10" json:"method"`
Path string `gorm:"size:255" json:"path"`
IP string `gorm:"size:45" json:"ip"`
UserAgent string `gorm:"size:500" json:"userAgent"`
Request string `gorm:"type:text" json:"request"`
Response string `gorm:"type:text" json:"response"`
Status int `gorm:"default:1" json:"status"`
Duration int64 `json:"duration"` // 毫秒
}
// TableName 指定表名
func (User) TableName() string {
return "admin_users"
}
func (Role) TableName() string {
return "admin_roles"
}
func (SystemConfig) TableName() string {
return "admin_system_configs"
}
func (LoginLog) TableName() string {
return "admin_login_logs"
}
func (OperationLog) TableName() string {
return "admin_operation_logs"
}