package controller import ( "net/http" "ezops/model" "github.com/gin-gonic/gin" "gorm.io/gorm" ) // SessionCommandHandler 会话命令审计处理器 // Logan.Li type SessionCommandHandler struct { db *gorm.DB } // NewSessionCommandHandler 创建会话命令审计处理器 func NewSessionCommandHandler(db *gorm.DB) *SessionCommandHandler { return &SessionCommandHandler{db: db} } // ListSessionCommands 会话命令列表 // GET /api/v1/session-commands?session_id=&username=&page=&page_size= func (h *SessionCommandHandler) ListSessionCommands(c *gin.Context) { var req model.SessionCommandQuery if err := c.ShouldBindQuery(&req); err != nil { c.JSON(http.StatusBadRequest, model.Response{Code: 400, Message: err.Error()}) return } if req.Page <= 0 { req.Page = 1 } if req.PageSize <= 0 { req.PageSize = 20 } query := h.db.Model(&model.SessionCommand{}) if req.SessionID > 0 { query = query.Where("session_id = ?", req.SessionID) } if req.Username != "" { query = query.Where("username LIKE ?", "%"+req.Username+"%") } if req.ServerID > 0 { query = query.Where("server_id = ?", req.ServerID) } if req.Command != "" { query = query.Where("command LIKE ?", "%"+req.Command+"%") } var total int64 if err := query.Count(&total).Error; err != nil { c.JSON(http.StatusInternalServerError, model.Response{Code: 500, Message: "查询失败"}) return } var commands []model.SessionCommand if err := query.Order("id DESC"). Offset((req.Page - 1) * req.PageSize). Limit(req.PageSize). Find(&commands).Error; err != nil { c.JSON(http.StatusInternalServerError, model.Response{Code: 500, Message: "查询失败"}) return } c.JSON(http.StatusOK, model.Response{Code: 200, Data: model.ListResponse{ List: commands, Total: total, }}) }