sql_handler.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package handler
  2. import (
  3. "dbview/service/internal/common/response"
  4. "dbview/service/internal/modules/sql_editor/api"
  5. "dbview/service/internal/modules/sql_editor/service"
  6. "net/http"
  7. "github.com/gin-gonic/gin"
  8. "go.uber.org/zap"
  9. )
  10. // SQLEditorHandler SQL编辑器处理器
  11. type SQLEditorHandler struct {
  12. service *service.SQLEditorService
  13. logger *zap.Logger
  14. }
  15. // NewSQLEditorHandler 创建SQL编辑器处理器
  16. func NewSQLEditorHandler(service *service.SQLEditorService, logger *zap.Logger) *SQLEditorHandler {
  17. return &SQLEditorHandler{
  18. service: service,
  19. logger: logger,
  20. }
  21. }
  22. // HandleExecuteSQL 处理执行SQL请求
  23. // func (h *SQLEditorHandler) HandleExecuteSQL(c *gin.Context) {
  24. // var req api.SQLExecuteRequest
  25. // if err := c.ShouldBindJSON(&req); err != nil {
  26. // h.logger.Error("解析SQL执行请求失败", zap.Error(err))
  27. // c.JSON(http.StatusBadRequest, response.ParamError("请求参数无效"))
  28. // return
  29. // }
  30. // // 参数验证
  31. // if req.ConnectionID == "" {
  32. // c.JSON(http.StatusBadRequest, response.ParamError("缺少连接ID"))
  33. // return
  34. // }
  35. // if req.SQL == "" {
  36. // c.JSON(http.StatusBadRequest, response.ParamError("SQL语句不能为空"))
  37. // return
  38. // }
  39. // // 执行SQL
  40. // result, err := h.service.ExecuteSQL(c.Request.Context(), &req)
  41. // if err != nil {
  42. // h.logger.Error("执行SQL失败", zap.Error(err), zap.String("sql", req.SQL))
  43. // c.JSON(http.StatusInternalServerError, response.ErrorWithDetail("执行SQL失败", err))
  44. // return
  45. // }
  46. // // 如果是异步执行,返回202状态码
  47. // if req.Options.Async {
  48. // c.JSON(http.StatusAccepted, response.Success(result))
  49. // return
  50. // }
  51. // // 如果SQL执行失败,但没有服务错误
  52. // if !result.Success {
  53. // c.JSON(http.StatusOK, response.ErrorWithCode(response.CodeDBQueryError, result.ErrorMessage))
  54. // return
  55. // }
  56. // c.JSON(http.StatusOK, response.Success(result))
  57. // }
  58. // HandleGetTaskStatus 处理获取任务状态请求
  59. func (h *SQLEditorHandler) HandleGetTaskStatus(c *gin.Context) {
  60. taskID := c.Param("taskId")
  61. if taskID == "" {
  62. c.JSON(http.StatusBadRequest, response.ParamError("缺少任务ID"))
  63. return
  64. }
  65. status, err := h.service.GetTaskStatus(c.Request.Context(), taskID)
  66. if err != nil {
  67. h.logger.Error("获取任务状态失败", zap.Error(err), zap.String("taskId", taskID))
  68. c.JSON(http.StatusInternalServerError, response.ErrorWithDetail("获取任务状态失败", err))
  69. return
  70. }
  71. c.JSON(http.StatusOK, response.Success(status))
  72. }
  73. // HandleCancelTask 处理取消任务请求
  74. func (h *SQLEditorHandler) HandleCancelTask(c *gin.Context) {
  75. taskID := c.Param("taskId")
  76. if taskID == "" {
  77. c.JSON(http.StatusBadRequest, response.ParamError("缺少任务ID"))
  78. return
  79. }
  80. err := h.service.CancelTask(c.Request.Context(), taskID)
  81. if err != nil {
  82. h.logger.Error("取消任务失败", zap.Error(err), zap.String("taskId", taskID))
  83. c.JSON(http.StatusInternalServerError, response.ErrorWithDetail("取消任务失败", err))
  84. return
  85. }
  86. c.JSON(http.StatusOK, response.Success("任务已取消"))
  87. }
  88. // HandleListHistory 处理获取历史记录请求
  89. func (h *SQLEditorHandler) HandleListHistory(c *gin.Context) {
  90. var req api.SQLListHistoryRequest
  91. if err := c.ShouldBindJSON(&req); err != nil {
  92. h.logger.Error("解析历史记录请求失败", zap.Error(err))
  93. c.JSON(http.StatusBadRequest, response.ParamError("请求参数无效"))
  94. return
  95. }
  96. records, total, err := h.service.ListHistory(c.Request.Context(), &req)
  97. if err != nil {
  98. h.logger.Error("获取历史记录失败", zap.Error(err))
  99. c.JSON(http.StatusInternalServerError, response.ErrorWithDetail("获取历史记录失败", err))
  100. return
  101. }
  102. c.JSON(http.StatusOK, response.Success(gin.H{
  103. "records": records,
  104. "total": total,
  105. }))
  106. }