handler.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package handler
  2. import (
  3. "context"
  4. "net/http"
  5. "time"
  6. "dbview/service/internal/common/response"
  7. "dbview/service/internal/modules/mcp_ai/api"
  8. "dbview/service/internal/modules/mcp_ai/service"
  9. "github.com/gin-gonic/gin"
  10. )
  11. // Handler 提供 AI 聊天接口的 HTTP 处理器。
  12. type Handler struct {
  13. svc *service.AIService
  14. }
  15. // NewHandler 创建 Handler。
  16. func NewHandler(svc *service.AIService) *Handler {
  17. return &Handler{svc: svc}
  18. }
  19. // Chat 提供 POST /ai/chat 接口。
  20. func (h *Handler) Chat(c *gin.Context) {
  21. var req api.ChatRequest
  22. if err := c.ShouldBindJSON(&req); err != nil {
  23. c.JSON(http.StatusBadRequest, response.Response{Code: 1, Msg: "参数错误", Error: err.Error()})
  24. return
  25. }
  26. ctx, cancel := context.WithTimeout(c.Request.Context(), 45*time.Second)
  27. defer cancel()
  28. text, err := h.svc.Chat(ctx, req.Prompt, req.System, req.Model)
  29. if err != nil {
  30. c.JSON(http.StatusInternalServerError, response.Response{Code: 2, Msg: "AI 调用失败", Error: err.Error()})
  31. return
  32. }
  33. c.JSON(http.StatusOK, response.Response{Code: 0, Msg: "ok", Data: api.ChatResponse{Text: text}})
  34. }