package controller import ( "strconv" "seeyon-filesystem/dto" "seeyon-filesystem/service" "seeyon-filesystem/utils" "github.com/gin-gonic/gin" ) // LogController 日志控制器 type LogController struct { logService *service.LogService } func NewLogController() *LogController { return &LogController{ logService: service.NewLogService(), } } // List 查询操作日志 // GET /api/admin/logs?page=1&size=20&action=upload&resource=file&keyword=xxx func (c *LogController) List(ctx *gin.Context) { page, _ := strconv.Atoi(ctx.DefaultQuery("page", "1")) size, _ := strconv.Atoi(ctx.DefaultQuery("size", "20")) if page < 1 { page = 1 } if size < 1 || size > 100 { size = 20 } action := ctx.Query("action") resource := ctx.Query("resource") keyword := ctx.Query("keyword") logs, total, err := c.logService.List(page, size, action, resource, keyword, 0) if err != nil { utils.ServerError(ctx, "查询失败") return } utils.PageSuccess(ctx, logs, total, page, size) } // Stats 日志统计 // GET /api/admin/logs/stats func (c *LogController) Stats(ctx *gin.Context) { stats, err := c.logService.GetStats() if err != nil { utils.ServerError(ctx, "查询失败") return } utils.Success(ctx, stats) } // Clean 清理旧日志 // POST /api/admin/logs/clean func (c *LogController) Clean(ctx *gin.Context) { var req dto.LogCleanRequest if err := ctx.ShouldBindJSON(&req); err != nil { utils.BadRequest(ctx, "参数错误") return } count, err := c.logService.CleanOld(req.Days) if err != nil { utils.ServerError(ctx, "清理失败") return } utils.SuccessWithMessage(ctx, "清理完成", gin.H{"deleted": count}) }