Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions internal/dao/file2document.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,8 @@ func (dao *File2DocumentDAO) GetByDocumentID(docID string) ([]*entity.File2Docum
func (dao *File2DocumentDAO) DeleteByDocumentID(docID string) error {
return DB.Unscoped().Where("document_id = ?", docID).Delete(&entity.File2Document{}).Error
}

// Create inserts a new file2document mapping record.
func (dao *File2DocumentDAO) Create(mapping *entity.File2Document) error {
return DB.Create(mapping).Error
}
72 changes: 68 additions & 4 deletions internal/handler/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,17 @@ import (

// FileHandler file handler
type FileHandler struct {
fileService *service.FileService
userService *service.UserService
fileService *service.FileService
userService *service.UserService
file2DocumentService *service.File2DocumentService
}

// NewFileHandler create file handler
func NewFileHandler(fileService *service.FileService, userService *service.UserService) *FileHandler {
return &FileHandler{
fileService: fileService,
userService: userService,
fileService: fileService,
userService: userService,
file2DocumentService: service.NewFile2DocumentService(),
}
}

Expand Down Expand Up @@ -552,3 +554,65 @@ func (h *FileHandler) Download(c *gin.Context) {
// Send file data
c.Data(http.StatusOK, contentType, blob)
}

// LinkToDatasets links files (or folder trees) to one or more datasets.
// Mirrors Python POST /api/v1/files/link-to-datasets (convert).
// @Summary Link files to datasets
// @Description Associate files with target knowledge-base datasets, re-indexing
// as needed. Folder inputs are expanded to their innermost files.
// The heavy DB work runs in a goroutine; the endpoint returns immediately.
// @Tags file
// @Accept json
// @Produce json
// @Param request body service.LinkToDatasetsRequest true "file_ids and kb_ids"
// @Success 200 {object} map[string]interface{}
// @Router /api/v1/files/link-to-datasets [post]
func (h *FileHandler) LinkToDatasets(c *gin.Context) {
user, errorCode, errorMessage := GetUser(c)
if errorCode != common.CodeSuccess {
jsonError(c, errorCode, errorMessage)
return
}

var req service.LinkToDatasetsRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusOK, gin.H{
"code": common.CodeDataError,
"data": false,
"message": err.Error(),
})
return
}

if len(req.FileIDs) == 0 {
c.JSON(http.StatusOK, gin.H{
"code": common.CodeDataError,
"data": false,
"message": "required argument is missing: file_ids",
})
return
}
if len(req.KbIDs) == 0 {
c.JSON(http.StatusOK, gin.H{
"code": common.CodeDataError,
"data": false,
"message": "required argument is missing: kb_ids",
})
return
}

if err := h.file2DocumentService.LinkToDatasets(user.ID, &req); err != nil {
c.JSON(http.StatusOK, gin.H{
"code": common.CodeDataError,
"data": false,
"message": err.Error(),
})
return
}

c.JSON(http.StatusOK, gin.H{
"code": common.CodeSuccess,
"data": true,
"message": "success",
})
}
1 change: 1 addition & 0 deletions internal/router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ func (r *Router) Setup(engine *gin.Engine) {
file.GET("", r.fileHandler.ListFiles)
file.DELETE("", r.fileHandler.DeleteFiles)
file.POST("/move", r.fileHandler.MoveFiles)
file.POST("/link-to-datasets", r.fileHandler.LinkToDatasets)
file.GET("/:id/ancestors", r.fileHandler.GetFileAncestors)
file.GET("/:id/parent", r.fileHandler.GetParentFolder)
file.GET("/:id", r.fileHandler.Download)
Expand Down
Loading