package handler import ( "net/http" "x-agents/server/internal/model" "x-agents/server/internal/service" "github.com/gin-gonic/gin" ) type ApprovalHandler struct { approvalService *service.ApprovalService } func NewApprovalHandler(approvalService *service.ApprovalService) *ApprovalHandler { return &ApprovalHandler{approvalService: approvalService} } // Approve 处理审批请求 func (h *ApprovalHandler) Approve(c *gin.Context) { var req struct { RequestID string `json:"request_id" binding:"required"` Approved bool `json:"approved"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } userID, exists := c.Get("user_id") if !exists { c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) return } var result interface{} var err error if req.Approved { result, err = h.approvalService.Approve(req.RequestID, userID.(string)) } else { result, err = h.approvalService.Reject(req.RequestID, userID.(string)) } if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, result) } // GetStatus 获取审批状态 func (h *ApprovalHandler) GetStatus(c *gin.Context) { requestID := c.Param("id") result, err := h.approvalService.GetApproval(requestID) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "request not found"}) return } c.JSON(http.StatusOK, result) } // ListPending 获取待审批列表 func (h *ApprovalHandler) ListPending(c *gin.Context) { result, err := h.approvalService.GetPendingApprovals() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } if result == nil { result = []model.ToolApprovalRequest{} } c.JSON(http.StatusOK, gin.H{"pending": result}) }