package controllers import ( "strconv" "time" "github.com/gin-gonic/gin" "lokistack/models" "lokistack/services" "lokistack/utils" ) // AuditController 审计日志查询(仅管理员) type AuditController struct{} func NewAuditController() *AuditController { return &AuditController{} } // List 分页查询审计日志 // GET /api/v1/audit-logs?page=1&pageSize=20&username=&module=&action=&status=0&startTime=&endTime= func (ctrl *AuditController) List(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "20")) if pageSize <= 0 || pageSize > 200 { pageSize = 20 } status, _ := strconv.Atoi(c.DefaultQuery("status", "0")) q := models.AuditQuery{ Username: c.Query("username"), Module: c.Query("module"), Action: c.Query("action"), ResourceID: c.Query("resourceId"), Status: status, Page: page, PageSize: pageSize, } if v := c.Query("startTime"); v != "" { if t, err := time.Parse(time.RFC3339, v); err == nil { q.StartTime = &t } } if v := c.Query("endTime"); v != "" { if t, err := time.Parse(time.RFC3339, v); err == nil { q.EndTime = &t } } list, total := services.ListAuditLogs(q) utils.Success(c, gin.H{"list": list, "total": total, "page": page, "pageSize": pageSize}) } // Get 审计详情(含 Before/After 完整内容) func (ctrl *AuditController) Get(c *gin.Context) { id, err := utils.IntParam(c, "id") if err != nil { utils.BadRequest(c, "ID 无效") return } entry, err := services.GetAuditLog(uint(id)) if err != nil { utils.NotFound(c, err.Error()) return } utils.Success(c, entry) } // Stats 统计卡片 func (ctrl *AuditController) Stats(c *gin.Context) { utils.Success(c, services.AuditStatistics()) }