Files
verify/backend/internal/service/log_service.go
T
admin 26349c15d3 fix: 修复日志记录应用列为空的问题
- 添加LogOperationWithApp方法支持传入ApplicationID
- 创建/更新/删除卡密类型时记录ApplicationID
- 创建/更新应用时记录ApplicationID
2026-04-30 20:58:52 +08:00

175 lines
4.5 KiB
Go

package service
import (
"verification-platform-backend/internal/database"
"verification-platform-backend/internal/model"
"github.com/gin-gonic/gin"
)
type LogService struct{}
type LogParams struct {
UserID *uint
ApplicationID *uint
AppUserID *uint
LogType string
Action string
Resource string
ResourceID *uint
Details string
IPAddress string
UserAgent string
DeviceID string
Status string
Level string
ErrorMessage string
StackTrace string
}
func NewLogService() *LogService {
return &LogService{}
}
func (s *LogService) CreateLog(params LogParams) error {
log := model.Log{
UserID: params.UserID,
ApplicationID: params.ApplicationID,
AppUserID: params.AppUserID,
LogType: params.LogType,
Action: params.Action,
Resource: params.Resource,
ResourceID: params.ResourceID,
Details: params.Details,
IPAddress: params.IPAddress,
UserAgent: params.UserAgent,
DeviceID: params.DeviceID,
Status: params.Status,
Level: params.Level,
ErrorMessage: params.ErrorMessage,
StackTrace: params.StackTrace,
}
if log.LogType == "" {
log.LogType = "operation"
}
if log.Status == "" {
log.Status = "success"
}
if log.Level == "" {
log.Level = "info"
}
return database.DB.Create(&log).Error
}
func (s *LogService) CreateLogFromContext(c *gin.Context, params LogParams) error {
params.IPAddress = c.ClientIP()
params.UserAgent = c.GetHeader("User-Agent")
if userID, exists := c.Get("user_id"); exists && params.UserID == nil {
if uid, ok := userID.(uint); ok {
params.UserID = &uid
}
}
return s.CreateLog(params)
}
func (s *LogService) LogOperation(c *gin.Context, action, resource string, resourceID *uint, details string, err error) error {
params := LogParams{
LogType: "operation",
Action: action,
Resource: resource,
ResourceID: resourceID,
Details: details,
}
if err != nil {
params.Status = "failed"
params.Level = "error"
params.ErrorMessage = err.Error()
}
return s.CreateLogFromContext(c, params)
}
func (s *LogService) LogOperationWithApp(c *gin.Context, applicationID *uint, action, resource string, resourceID *uint, details string, err error) error {
params := LogParams{
LogType: "operation",
ApplicationID: applicationID,
Action: action,
Resource: resource,
ResourceID: resourceID,
Details: details,
}
if err != nil {
params.Status = "failed"
params.Level = "error"
params.ErrorMessage = err.Error()
}
return s.CreateLogFromContext(c, params)
}
func (s *LogService) LogVerification(c *gin.Context, applicationID *uint, appUserID *uint, action, details string, deviceID string, err error) error {
params := LogParams{
LogType: "verification",
ApplicationID: applicationID,
AppUserID: appUserID,
Action: action,
Resource: "verification",
Details: details,
DeviceID: deviceID,
}
if err != nil {
params.Status = "failed"
params.Level = "warning"
params.ErrorMessage = err.Error()
}
return s.CreateLogFromContext(c, params)
}
func (s *LogService) LogException(c *gin.Context, action, errorMessage, stackTrace string) error {
params := LogParams{
LogType: "exception",
Action: action,
Resource: "system",
Status: "failed",
Level: "error",
ErrorMessage: errorMessage,
StackTrace: stackTrace,
}
return s.CreateLogFromContext(c, params)
}
var logService = NewLogService()
func CreateLog(params LogParams) error {
return logService.CreateLog(params)
}
func CreateLogFromContext(c *gin.Context, params LogParams) error {
return logService.CreateLogFromContext(c, params)
}
func LogOperation(c *gin.Context, action, resource string, resourceID *uint, details string, err error) error {
return logService.LogOperation(c, action, resource, resourceID, details, err)
}
func LogOperationWithApp(c *gin.Context, applicationID *uint, action, resource string, resourceID *uint, details string, err error) error {
return logService.LogOperationWithApp(c, applicationID, action, resource, resourceID, details, err)
}
func LogVerification(c *gin.Context, applicationID *uint, appUserID *uint, action, details string, DeviceFingerprint string, err error) error {
return logService.LogVerification(c, applicationID, appUserID, action, details, DeviceFingerprint, err)
}
func LogException(c *gin.Context, action, errorMessage, stackTrace string) error {
return logService.LogException(c, action, errorMessage, stackTrace)
}