问题:.gitignore 第 27 行的 `log/` 未锚定根目录,会匹配任意层级的 log 目录,把下面 4 个**源码包**一并忽略: - api/admin/base/log - api/admin/system/log - internal/service/admin/base/log - internal/service/admin/system/log 而引用它们的 internal/controller/admin/log.go 已在库中,于是 「已提交的代码 import 了不存在(未提交)的包」——干净检出后 `go build .` 直接失败: no required module provides package service.xpcool.com/api/admin/base/log 因为 service 仓库没有 CI 自动构建,这个问题一直没有暴露, 影响是:新克隆/新设备无法编译,任何干净检出构建都会失败。 修复: 1. 规则改为 `/log/`,只忽略仓库根目录下的运行日志输出目录 (config.dev.yaml 的 logger.path: "log"),不再误伤同名源码包; 2. 补交被忽略期间漏掉的 4 个 log 包,恢复 HEAD 完整可编译。
52 lines
2.6 KiB
Go
52 lines
2.6 KiB
Go
// Package admin_system_log 定义管理员操作日志(操作审计)查询接口契约。
|
||
//
|
||
// 路由前缀 /api/service/admin/system/log,对应 admin_menu:
|
||
// - POST /api/service/admin/system/log —— system:log:list(操作日志分页查询)
|
||
package admin_system_log
|
||
|
||
import "github.com/gogf/gf/v2/frame/g"
|
||
|
||
// LogItem 一条管理员操作日志记录。
|
||
type LogItem struct {
|
||
Id uint64 `json:"id"`
|
||
AdminID uint64 `json:"adminId"` // 操作人ID
|
||
AdminUsername string `json:"adminUsername"` // 操作人账号(冗余)
|
||
Permission string `json:"permission"` // 命中的权限码
|
||
Method string `json:"method"` // HTTP 方法
|
||
Path string `json:"path"` // 请求路径
|
||
IP string `json:"ip"` // 来源 IP
|
||
IpLocation string `json:"ipLocation"` // IP 归属地
|
||
Param string `json:"param"` // 请求参数
|
||
DurationMS uint `json:"durationMs"` // 耗时(毫秒)
|
||
StatusCode int `json:"statusCode"` // HTTP 状态码
|
||
ErrorMessage string `json:"errorMessage"` // 失败原因
|
||
UserAgent string `json:"userAgent"` // 浏览器 UA
|
||
CreatedAt string `json:"createdAt"` // 操作时间
|
||
}
|
||
|
||
// LogListReq 分页查询管理员操作日志。
|
||
type LogListReq struct {
|
||
g.Meta `path:"/system/log" method:"post" tags:"Admin/System/Log" summary:"操作日志列表"`
|
||
Page int `json:"page" d:"1" v:"min:1"`
|
||
Size int `json:"size" d:"10" v:"min:1|max:100"`
|
||
AdminID uint64 `json:"adminId"` // 按管理员ID精确过滤
|
||
Username string `json:"username"` // 按管理员账号模糊过滤
|
||
IP string `json:"ip"` // 按来源 IP 模糊过滤
|
||
IpLocation string `json:"ipLocation"` // 按 IP 归属地模糊过滤
|
||
Method string `json:"method"` // 按 HTTP 方法精确过滤
|
||
Status int `json:"status"` // 结果筛选:0 全部 / 1 成功 / 2 失败
|
||
Keyword string `json:"keyword"` // 关键字:匹配 permission / path / ip
|
||
StartTime string `json:"startTime"` // 起始时间,格式 2006-01-02 15:04:05
|
||
EndTime string `json:"endTime"` // 结束时间,格式 2006-01-02 15:04:05
|
||
MinDuration int `json:"minDuration"` // 耗时下限(ms),0 不限
|
||
MaxDuration int `json:"maxDuration"` // 耗时上限(ms),0 不限
|
||
OrderBy string `json:"orderBy"` // 排序字段:createdAt(默认) | durationMs
|
||
OrderDir string `json:"orderDir"` // 排序方向:desc(默认) | asc
|
||
}
|
||
|
||
// LogListRes 是 LogListReq 的响应。
|
||
type LogListRes struct {
|
||
List []*LogItem `json:"list"`
|
||
Total int `json:"total"`
|
||
}
|