Files
goalfylearning-admin/internal/services/audit_log_service.go

71 lines
1.7 KiB
Go

package services
import (
"goalfymax-admin/internal/models"
"goalfymax-admin/internal/storage"
"time"
)
// AuditLogService 审计日志服务接口
type AuditLogService interface {
Create(req *models.CreateAuditLogRequest) error
GetByID(id uint) (*models.AuditLog, error)
List(req *models.AuditLogListRequest) (*models.AuditLogListResponse, error)
}
type auditLogService struct {
storage storage.AuditLogStorage
}
// NewAuditLogService 创建审计日志服务实例
func NewAuditLogService(storage storage.AuditLogStorage) AuditLogService {
return &auditLogService{
storage: storage,
}
}
// Create 创建审计日志
func (s *auditLogService) Create(req *models.CreateAuditLogRequest) error {
log := &models.AuditLog{
OperationType: req.OperationType,
OperationTime: time.Now(),
OperatorID: req.OperatorID,
OperatorEmail: req.OperatorEmail,
TargetType: req.TargetType,
TargetID: req.TargetID,
TargetEmail: req.TargetEmail,
OperationDetails: req.OperationDetails,
IPAddress: req.IPAddress,
UserAgent: req.UserAgent,
Status: req.Status,
ErrorMessage: req.ErrorMessage,
}
// 设置默认状态
if log.Status == "" {
log.Status = models.AuditLogStatusSuccess
}
return s.storage.Create(log)
}
// GetByID 根据ID获取审计日志
func (s *auditLogService) GetByID(id uint) (*models.AuditLog, error) {
return s.storage.GetByID(id)
}
// List 查询审计日志列表
func (s *auditLogService) List(req *models.AuditLogListRequest) (*models.AuditLogListResponse, error) {
logs, total, err := s.storage.List(req)
if err != nil {
return nil, err
}
return &models.AuditLogListResponse{
List: logs,
Total: total,
Page: req.Page,
Size: req.Size,
}, nil
}