feat():learning后台管理项目初始化
This commit is contained in:
114
internal/storage/audit_log_storage.go
Normal file
114
internal/storage/audit_log_storage.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"goalfymax-admin/internal/models"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
// AuditLogStorage 审计日志存储接口
|
||||
type AuditLogStorage interface {
|
||||
Create(log *models.AuditLog) error
|
||||
GetByID(id uint) (*models.AuditLog, error)
|
||||
List(req *models.AuditLogListRequest) ([]models.AuditLog, int64, error)
|
||||
}
|
||||
|
||||
type auditLogStorage struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewAuditLogStorage 创建审计日志存储实例
|
||||
func NewAuditLogStorage() AuditLogStorage {
|
||||
return &auditLogStorage{db: DB}
|
||||
}
|
||||
|
||||
// Create 创建审计日志
|
||||
func (s *auditLogStorage) Create(log *models.AuditLog) error {
|
||||
// 如果操作时间为空,设置为当前时间
|
||||
if log.OperationTime.IsZero() {
|
||||
log.OperationTime = time.Now()
|
||||
}
|
||||
return s.db.Create(log).Error
|
||||
}
|
||||
|
||||
// GetByID 根据ID获取审计日志
|
||||
func (s *auditLogStorage) GetByID(id uint) (*models.AuditLog, error) {
|
||||
var log models.AuditLog
|
||||
err := s.db.First(&log, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &log, nil
|
||||
}
|
||||
|
||||
// List 查询审计日志列表
|
||||
func (s *auditLogStorage) List(req *models.AuditLogListRequest) ([]models.AuditLog, int64, error) {
|
||||
var logs []models.AuditLog
|
||||
var total int64
|
||||
|
||||
query := s.db.Model(&models.AuditLog{})
|
||||
|
||||
// 操作类型筛选
|
||||
if req.OperationType != "" {
|
||||
query = query.Where("operation_type = ?", req.OperationType)
|
||||
}
|
||||
|
||||
// 操作人筛选
|
||||
if req.OperatorEmail != "" {
|
||||
query = query.Where("operator_email = ?", req.OperatorEmail)
|
||||
}
|
||||
|
||||
// 操作对象搜索(模糊匹配)
|
||||
if req.TargetEmail != "" {
|
||||
query = query.Where("target_email LIKE ?", "%"+req.TargetEmail+"%")
|
||||
}
|
||||
|
||||
// 时间范围筛选
|
||||
if req.StartTime != "" {
|
||||
startTime, err := time.Parse("2006-01-02 15:04:05", req.StartTime)
|
||||
if err == nil {
|
||||
query = query.Where("operation_time >= ?", startTime)
|
||||
}
|
||||
}
|
||||
if req.EndTime != "" {
|
||||
endTime, err := time.Parse("2006-01-02 15:04:05", req.EndTime)
|
||||
if err == nil {
|
||||
query = query.Where("operation_time <= ?", endTime)
|
||||
}
|
||||
}
|
||||
|
||||
// 统计总数
|
||||
if err := query.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 排序
|
||||
sortBy := req.SortBy
|
||||
if sortBy == "" {
|
||||
sortBy = "operation_time"
|
||||
}
|
||||
sortOrder := req.SortOrder
|
||||
if sortOrder == "" {
|
||||
sortOrder = "desc"
|
||||
}
|
||||
query = query.Order(sortBy + " " + sortOrder)
|
||||
|
||||
// 分页
|
||||
page := req.Page
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
size := req.Size
|
||||
if size < 1 {
|
||||
size = 20
|
||||
}
|
||||
offset := (page - 1) * size
|
||||
query = query.Offset(offset).Limit(size)
|
||||
|
||||
// 查询
|
||||
if err := query.Find(&logs).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return logs, total, nil
|
||||
}
|
||||
Reference in New Issue
Block a user