diff --git a/internal/dao/file.go b/internal/dao/file.go index 7576d42e9d..38c6d514af 100644 --- a/internal/dao/file.go +++ b/internal/dao/file.go @@ -314,7 +314,7 @@ func (dao *FileDAO) IsParentFolderExist(parentID string) bool { } // Query retrieves files by conditions -func (dao *FileDAO) Query(name string, parentID string) []*entity.File { +func (dao *FileDAO) Query(name string, parentID string, tenantID string) []*entity.File { var files []*entity.File query := DB.Model(&entity.File{}) if name != "" { @@ -323,6 +323,9 @@ func (dao *FileDAO) Query(name string, parentID string) []*entity.File { if parentID != "" { query = query.Where("parent_id = ?", parentID) } + if tenantID != "" { + query = query.Where("tenant_id = ?", tenantID) + } query.Find(&files) return files } diff --git a/internal/handler/file_commit.go b/internal/handler/file_commit.go index a42a4b6c8f..6b553fe5a4 100644 --- a/internal/handler/file_commit.go +++ b/internal/handler/file_commit.go @@ -97,7 +97,7 @@ func (h *FileCommitHandler) resolveDatasetFolderID(datasetID string) (string, er if err != nil { return "", err } - files := h.fileDAO.Query(kb.Name, "") + files := h.fileDAO.Query(kb.Name, "", kb.TenantID) for _, f := range files { if f.SourceType == string(entity.FileSourceKnowledgebase) && f.Type == "folder" && f.TenantID == kb.TenantID { return f.ID, nil diff --git a/internal/service/document.go b/internal/service/document.go index 75ea1df6d2..5281cacc36 100644 --- a/internal/service/document.go +++ b/internal/service/document.go @@ -3323,7 +3323,7 @@ func (s *DocumentService) ensureKBFolder(kb *entity.Knowledgebase, tenantID stri // newAFileFromKB returns the existing folder named name under parentID, or // creates it. Mirrors Python FileService.new_a_file_from_kb. func (s *DocumentService) newAFileFromKB(tenantID, name, parentID string) (*entity.File, error) { - for _, f := range s.fileDAO.Query(name, parentID) { + for _, f := range s.fileDAO.Query(name, parentID, tenantID) { if f.TenantID == tenantID { return f, nil } diff --git a/internal/service/file.go b/internal/service/file.go index cecd1a0b2f..4ffd6b93f1 100644 --- a/internal/service/file.go +++ b/internal/service/file.go @@ -377,7 +377,7 @@ func (s *FileService) UploadFile(tenantID, parentID string, files []*multipart.F return nil, fmt.Errorf("failed to store file: %w", err) } - uniqueName := s.getUniqueFilename(fileObjNames[len(fileObjNames)-1], lastFolder.ID) + uniqueName := s.getUniqueFilename(fileObjNames[len(fileObjNames)-1], lastFolder.ID, tenantID) fileRecord := &entity.File{ ID: s.generateUUID(), @@ -477,8 +477,8 @@ func (s *FileService) createFolderRecursive(parentFolder *entity.File, names []s return s.createFolderRecursive(newFolder, names, count+1, tenantID) } -func (s *FileService) getUniqueFilename(name, parentID string) string { - existingFiles := s.fileDAO.Query(name, parentID) +func (s *FileService) getUniqueFilename(name, parentID, tenantID string) string { + existingFiles := s.fileDAO.Query(name, parentID, tenantID) if len(existingFiles) == 0 { return name } @@ -490,7 +490,7 @@ func (s *FileService) getUniqueFilename(name, parentID string) string { counter := 1 for { newName := fmt.Sprintf("%s_%d%s", nameWithoutExt, counter, ext) - existingFiles = s.fileDAO.Query(newName, parentID) + existingFiles = s.fileDAO.Query(newName, parentID, tenantID) if len(existingFiles) == 0 { return newName } @@ -517,7 +517,7 @@ func (s *FileService) CreateFolder(tenantID, name, parentID, fileType string) (m return nil, fmt.Errorf("Parent Folder Doesn't Exist!") } - existingFiles := s.fileDAO.Query(name, parentID) + existingFiles := s.fileDAO.Query(name, parentID, tenantID) if len(existingFiles) > 0 { return nil, fmt.Errorf("Duplicated folder name in the same folder.") } @@ -839,7 +839,7 @@ func (s *FileService) MoveFiles(uid string, srcFileIDs []string, destFileID stri if destFolder != nil { targetParentID = destFolder.ID } - existingFiles := s.fileDAO.Query(newName, targetParentID) + existingFiles := s.fileDAO.Query(newName, targetParentID, file.TenantID) for _, f := range existingFiles { if f.Name == newName { return false, "Duplicated file name in the same folder." @@ -848,7 +848,7 @@ func (s *FileService) MoveFiles(uid string, srcFileIDs []string, destFileID stri } else if destFolder != nil { // Plain move (no rename): check for duplicate names in destination folder for _, file := range files { - existingFiles := s.fileDAO.Query(file.Name, destFolder.ID) + existingFiles := s.fileDAO.Query(file.Name, destFolder.ID, file.TenantID) for _, f := range existingFiles { // Ignore the source file itself if f.ID != file.ID { @@ -902,7 +902,7 @@ func (s *FileService) moveEntryRecursive(sourceFile *entity.File, destFolder *en if sourceFile.Type == FileTypeFolder { // Handle folder move - existingFolders := s.fileDAO.Query(effectiveName, destFolder.ID) + existingFolders := s.fileDAO.Query(effectiveName, destFolder.ID, sourceFile.TenantID) var newFolder *entity.File if len(existingFolders) > 0 { // Prevent moving a folder into itself (self-target merge) diff --git a/internal/service/skill_space.go b/internal/service/skill_space.go index 433ef49fcc..3610bcdd6e 100644 --- a/internal/service/skill_space.go +++ b/internal/service/skill_space.go @@ -193,7 +193,7 @@ func (s *SkillSpaceService) CreateSpace(req *CreateSpaceRequest) (map[string]int // Check if there's an existing folder with the same name under skills folder // If exists, delete it to prevent duplicate folder names - existingFolders := s.fileDAO.Query(req.Name, skillsFolderID) + existingFolders := s.fileDAO.Query(req.Name, skillsFolderID, req.TenantID) for _, f := range existingFolders { if f.Type == "folder" && f.Name == req.Name { common.Info("Deleting existing space folder with same name", zap.String("folderID", f.ID), zap.String("name", req.Name))