package handler import ( "net/http" "x-agents/server/internal/model" "x-agents/server/internal/service" "github.com/gin-gonic/gin" ) type DatabaseHandler struct { service *service.DatabaseService } func NewDatabaseHandler(svc *service.DatabaseService) *DatabaseHandler { return &DatabaseHandler{service: svc} } // @Summary 检查数据库连接 // @Description 测试数据库连接是否正常 // @Tags 数据库管理 // @Accept json // @Produce json // @Param request body model.CheckRequest true "数据库连接信息" // @Success 200 {object} map[string]interface{} // @Failure 400 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /database/check [post] func (h *DatabaseHandler) Check(c *gin.Context) { var req model.CheckRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } result, err := h.service.Check(req) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, result) } // @Summary 创建数据库 // @Description 添加新的数据库连接信息 // @Tags 数据库管理 // @Accept json // @Produce json // @Param request body model.CreateDatabaseRequest true "数据库信息" // @Success 201 {object} model.DatabaseInfo // @Failure 400 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /database/add [post] func (h *DatabaseHandler) Create(c *gin.Context) { var req model.CreateDatabaseRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } info, err := h.service.Create(req) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusCreated, info) } // @Summary 获取数据库详情 // @Description 根据ID获取数据库详细信息 // @Tags 数据库管理 // @Accept json // @Produce json // @Param id path string true "数据库ID" // @Success 200 {object} model.DatabaseInfo // @Failure 404 {object} map[string]string // @Router /database/{id} [get] func (h *DatabaseHandler) GetByID(c *gin.Context) { id := c.Param("id") info, err := h.service.GetByID(id) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) return } c.JSON(http.StatusOK, info) } // @Summary 获取数据库列表 // @Description 获取所有已添加的数据库列表 // @Tags 数据库管理 // @Accept json // @Produce json // @Success 200 {object} map[string]interface{} // @Failure 500 {object} map[string]string // @Router /database/list [get] func (h *DatabaseHandler) List(c *gin.Context) { list, err := h.service.List() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } if list == nil { list = []model.DatabaseInfo{} } c.JSON(http.StatusOK, gin.H{"list": list}) } // @Summary 更新数据库信息 // @Description 更新指定数据库的信息 // @Tags 数据库管理 // @Accept json // @Produce json // @Param id path string true "数据库ID" // @Param request body model.UpdateDatabaseRequest true "更新信息" // @Success 200 {object} model.DatabaseInfo // @Failure 400 {object} map[string]string // @Failure 404 {object} map[string]string // @Router /database/{id} [put] func (h *DatabaseHandler) Update(c *gin.Context) { id := c.Param("id") var req model.UpdateDatabaseRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } info, err := h.service.Update(id, req) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) return } c.JSON(http.StatusOK, info) } // @Summary 保存图谱信息 // @Description 保存数据库的图谱结构信息 // @Tags 数据库管理 // @Accept json // @Produce json // @Param request body model.SaveGraphRequest true "图谱信息" // @Success 200 {object} map[string]interface{} // @Failure 400 {object} map[string]string // @Failure 500 {object} map[string]string // @Router /database/graph/save [post] func (h *DatabaseHandler) SaveGraph(c *gin.Context) { var req model.SaveGraphRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } result, err := h.service.SaveGraph(req) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, result) } // @Summary 删除数据库 // @Description 删除指定的数据库连接 // @Tags 数据库管理 // @Accept json // @Produce json // @Param id path string true "数据库ID" // @Success 200 {object} map[string]string // @Failure 404 {object} map[string]string // @Router /database/{id} [delete] func (h *DatabaseHandler) Delete(c *gin.Context) { id := c.Param("id") err := h.service.Delete(id) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) return } c.JSON(http.StatusOK, gin.H{"message": "deleted"}) }