service.xpcool.com/internal/service/admin/system/audit/audit.go
夏犀麟 6e3ef67709 refactor(service): 重构服务层结构并更新导入路径
- 将 admin 相关服务移动到 internal/service/admin 目录下
- 更新控制器中的服务导入路径引用
- 移除已合并的服务文件
- 添加统一工作约定文档
- 更新 API 接口定义的包路径
2026-08-26 15:40:13 +08:00

43 lines
1.2 KiB
Go

package audit
import (
"context"
"github.com/gogf/gf/v2/os/glog"
"service.xpcool.com/internal/dao"
"service.xpcool.com/internal/model/do"
)
// AuditEvent 管理端操作审计事件。
type AuditEvent struct {
AdminID uint64
Permission, Method, Path, IP, Param string
DurationMS, StatusCode int
}
// IAdminAudit 管理端操作审计服务接口。
type IAdminAudit interface {
Record(context.Context, AuditEvent)
}
var localAdminAudit IAdminAudit
func AdminAudit() IAdminAudit {
if localAdminAudit == nil {
panic("AdminAudit implementation not registered")
}
return localAdminAudit
}
func RegisterAdminAudit(i IAdminAudit) { localAdminAudit = i }
type adminAudit struct{}
func NewAdminAudit() IAdminAudit { return &adminAudit{} }
// Record 采用尽力而为策略:审计落库失败会记录系统日志,但不影响原业务请求结果。
func (a *adminAudit) Record(ctx context.Context, e AuditEvent) {
_, err := dao.AdminOperationLog.Ctx(ctx).Data(do.AdminOperationLog{AdminUserId: e.AdminID, Permission: e.Permission, Method: e.Method, Path: e.Path, Ip: e.IP, RequestParam: e.Param, DurationMs: e.DurationMS, StatusCode: e.StatusCode}).Insert()
if err != nil {
glog.Error(ctx, err)
}
}