feat():learning后台管理项目初始化
This commit is contained in:
114
internal/models/audit_log.go
Normal file
114
internal/models/audit_log.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 操作类型常量
|
||||
const (
|
||||
OperationTypeBalanceAdjustment = "balance_adjustment" // 余额调整
|
||||
OperationTypeUserLevelChange = "user_level_change" // 用户等级修改
|
||||
OperationTypeUserStatusChange = "user_status_change" // 用户状态变更
|
||||
OperationTypeModelPriceChange = "model_price_change" // 模型价格修改
|
||||
OperationTypePermissionChange = "permission_change" // 权限变更
|
||||
OperationTypeConfigChange = "config_change" // 配置修改
|
||||
)
|
||||
|
||||
// 操作状态常量
|
||||
const (
|
||||
AuditLogStatusSuccess = "success" // 成功
|
||||
AuditLogStatusFailed = "failed" // 失败
|
||||
)
|
||||
|
||||
// 操作对象类型常量
|
||||
const (
|
||||
TargetTypeUser = "user" // 用户
|
||||
TargetTypeModel = "model" // 模型
|
||||
TargetTypeConfig = "config" // 配置
|
||||
)
|
||||
|
||||
// OperationDetails 操作详情JSON结构
|
||||
type OperationDetails map[string]interface{}
|
||||
|
||||
// Value 实现 driver.Valuer 接口
|
||||
func (d OperationDetails) Value() (driver.Value, error) {
|
||||
if d == nil {
|
||||
return nil, nil
|
||||
}
|
||||
return json.Marshal(d)
|
||||
}
|
||||
|
||||
// Scan 实现 sql.Scanner 接口
|
||||
func (d *OperationDetails) Scan(value interface{}) error {
|
||||
if value == nil {
|
||||
*d = nil
|
||||
return nil
|
||||
}
|
||||
bytes, ok := value.([]byte)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return json.Unmarshal(bytes, d)
|
||||
}
|
||||
|
||||
// AuditLog 审计日志模型
|
||||
type AuditLog struct {
|
||||
ID uint `json:"id" gorm:"primaryKey;autoIncrement;comment:主键ID"`
|
||||
OperationType string `json:"operation_type" gorm:"type:varchar(50);not null;index:idx_operation_type_time;comment:操作类型"`
|
||||
OperationTime time.Time `json:"operation_time" gorm:"not null;index:idx_operation_type_time;index:idx_operation_time;comment:操作时间"`
|
||||
OperatorID int `json:"operator_id" gorm:"not null;index:idx_operator_time;comment:操作人ID"`
|
||||
OperatorEmail string `json:"operator_email" gorm:"type:varchar(255);not null;index:idx_operator_email;comment:操作人邮箱"`
|
||||
TargetType string `json:"target_type" gorm:"type:varchar(50);comment:操作对象类型"`
|
||||
TargetID *int `json:"target_id" gorm:"comment:操作对象ID"`
|
||||
TargetEmail string `json:"target_email" gorm:"type:varchar(255);index:idx_target_email;comment:操作对象邮箱"`
|
||||
OperationDetails OperationDetails `json:"operation_details" gorm:"type:json;comment:操作详情JSON"`
|
||||
IPAddress string `json:"ip_address" gorm:"type:varchar(45);comment:操作来源IP地址"`
|
||||
UserAgent string `json:"user_agent" gorm:"type:varchar(500);comment:用户代理"`
|
||||
Status string `json:"status" gorm:"type:varchar(20);default:'success';comment:操作状态"`
|
||||
ErrorMessage string `json:"error_message" gorm:"type:text;comment:错误信息"`
|
||||
CreatedAt time.Time `json:"created_at" gorm:"not null;comment:记录创建时间"`
|
||||
UpdatedAt time.Time `json:"updated_at" gorm:"not null;comment:记录更新时间"`
|
||||
}
|
||||
|
||||
// TableName 指定数据库表名
|
||||
func (AuditLog) TableName() string {
|
||||
return "admin_audit_logs"
|
||||
}
|
||||
|
||||
// AuditLogListRequest 审计日志列表请求
|
||||
type AuditLogListRequest struct {
|
||||
OperationType string `form:"operation_type"` // 操作类型筛选
|
||||
OperatorEmail string `form:"operator_email"` // 操作人筛选
|
||||
TargetEmail string `form:"target_email"` // 操作对象搜索(模糊匹配)
|
||||
StartTime string `form:"start_time"` // 开始时间
|
||||
EndTime string `form:"end_time"` // 结束时间
|
||||
Page int `form:"page,default=1"` // 页码
|
||||
Size int `form:"size,default=20"` // 每页数量
|
||||
SortBy string `form:"sort_by"` // 排序字段,默认:operation_time
|
||||
SortOrder string `form:"sort_order"` // 排序方向,desc/asc,默认:desc
|
||||
}
|
||||
|
||||
// AuditLogListResponse 审计日志列表响应
|
||||
type AuditLogListResponse struct {
|
||||
List []AuditLog `json:"list"`
|
||||
Total int64 `json:"total"`
|
||||
Page int `json:"page"`
|
||||
Size int `json:"size"`
|
||||
}
|
||||
|
||||
// CreateAuditLogRequest 创建审计日志请求(内部使用)
|
||||
type CreateAuditLogRequest struct {
|
||||
OperationType string `json:"operation_type" binding:"required"`
|
||||
OperatorID int `json:"operator_id" binding:"required"`
|
||||
OperatorEmail string `json:"operator_email" binding:"required"`
|
||||
TargetType string `json:"target_type"`
|
||||
TargetID *int `json:"target_id"`
|
||||
TargetEmail string `json:"target_email"`
|
||||
OperationDetails OperationDetails `json:"operation_details"`
|
||||
IPAddress string `json:"ip_address"`
|
||||
UserAgent string `json:"user_agent"`
|
||||
Status string `json:"status"`
|
||||
ErrorMessage string `json:"error_message"`
|
||||
}
|
||||
Reference in New Issue
Block a user