MCPcopy Create free account
hub / github.com/53AI/53AIHub / createDirectoryRecord

Method createDirectoryRecord

api/service/directory_manager.go:189–266  ·  view source on GitHub ↗

createDirectoryRecord 在数据库中创建目录记录

(eid, libraryID int64, item FileStructureItem, basePath string, userID int64, createdDirs map[string]bool, originType string, originSource string, originRefID int64)

Source from the content-addressed store, hash-verified

187
188// createDirectoryRecord 在数据库中创建目录记录
189func (dm *DirectoryManager) createDirectoryRecord(eid, libraryID int64, item FileStructureItem, basePath string, userID int64, createdDirs map[string]bool, originType string, originSource string, originRefID int64) error {
190 // 使用basePath和relativePath组合完整路径
191 dirPath := dm.GetDirectoryPath(basePath, item.RelativePath)
192
193 // 检查目录是否已存在
194 existingFile, err := model.GetFileByPathAndLibraryNotDeleted(eid, libraryID, dirPath)
195 if err == nil && existingFile != nil && existingFile.Type == model.FILE_TYPE_DIR {
196 // 目录已存在且未被删除,跳过创建,不返回错误
197 if err := dm.backfillRecordingOriginForExistingDir(existingFile, originType, originSource, originRefID); err != nil {
198 return fmt.Errorf("回填目录来源信息失败: %v", err)
199 }
200 return nil
201 }
202
203 // 尝试恢复已删除的目录
204 if deletedFile, getErr := model.GetFileByPathAndLibraryWithDeleted(eid, libraryID, dirPath); getErr == nil && deletedFile != nil && deletedFile.Type == model.FILE_TYPE_DIR && deletedFile.IsDeleted {
205 // 不再自动恢复已删除的目录,而是创建一个新的同名目录
206 // 恢复已删除目录应该通过专门的API接口操作,而不是在上传文件时自动触发
207 // if restoreErr := model.RestoreFile(eid, deletedFile.ID); restoreErr != nil {
208 // return fmt.Errorf("恢复已删除目录失败: %v", restoreErr)
209 // }
210
211 // 创建新的同名目录,而不是恢复已删除的目录
212 file := &model.File{
213 Path: dirPath,
214 Type: model.FILE_TYPE_DIR, // 目录类型
215 LibraryID: libraryID,
216 Eid: eid,
217 UploadFileID: 0, // 目录不关联实际文件
218 Sort: 0,
219 UserID: userID, // 设置目录创建人
220 }
221 applyFileOriginMeta(file, originType, originSource, originRefID)
222
223 if err := file.Save(); err != nil {
224 return fmt.Errorf("保存目录记录失败: %v", err)
225 }
226
227 // 同步到 Elasticsearch
228 elasticsearch.SyncFileToES(file, "create")
229
230 // 为目录创建者自动分配管理权限
231 fps := NewFilePermissionService(eid)
232 if err := fps.AddFileCreatorPermission(file.ID, userID); err != nil {
233 // 权限分配失败不影响目录创建,只记录错误
234 // 这里可以考虑添加日志记录
235 }
236 return nil
237 }
238
239 // 创建目录记录
240 file := &model.File{
241 Path: dirPath,
242 Type: model.FILE_TYPE_DIR, // 目录类型
243 LibraryID: libraryID,
244 Eid: eid,
245 UploadFileID: 0, // 目录不关联实际文件
246 Sort: 0,

Callers 1

CreateDirectoryTreeMethod · 0.95

Calls 7

GetDirectoryPathMethod · 0.95
SaveMethod · 0.95
applyFileOriginMetaFunction · 0.85
NewFilePermissionServiceFunction · 0.85
ErrorfMethod · 0.80

Tested by

no test coverage detected