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

Method CreateFileRecord

api/service/directory_manager.go:269–333  ·  view source on GitHub ↗

CreateFileRecord 在数据库中创建文件记录

(eid, libraryID int64, relativePath string, uploadFileID int64, basePath string, userID int64, duplicateMode DuplicateMode, isPersonalLibrary bool, originType string, originSource string, originRefID int64)

Source from the content-addressed store, hash-verified

267
268// CreateFileRecord 在数据库中创建文件记录
269func (dm *DirectoryManager) CreateFileRecord(eid, libraryID int64, relativePath string, uploadFileID int64, basePath string, userID int64, duplicateMode DuplicateMode, isPersonalLibrary bool, originType string, originSource string, originRefID int64) (int64, error) {
270 dm.mu.Lock()
271 defer dm.mu.Unlock()
272
273 filePath := dm.GetDirectoryPath(basePath, relativePath)
274
275 if shouldAppendMarkdownSuffix() && filepath.Ext(filePath) != ".md" {
276 filePath += ".md"
277 }
278
279 var finalPath string
280 existingFile, _ := model.GetFileByPathAndLibraryNotDeleted(eid, libraryID, filePath)
281
282 if existingFile != nil && duplicateMode == DuplicateModeReplace {
283 cleanupSvc := NewCleanupService(model.DB)
284 if err := cleanupSvc.CleanupFileRelatedData(eid, existingFile.ID); err != nil {
285 return 0, fmt.Errorf("清理原文件相关数据失败: %v", err)
286 }
287 existingFile.UploadFileID = uploadFileID
288 existingFile.UserID = userID
289 applyFileOriginMeta(existingFile, originType, originSource, originRefID)
290 if !existingFile.IsRecordingOriginType() {
291 existingFile.SetPersonalUploadOrigin(uploadFileID)
292 }
293 existingFile.ConversionStatus = model.FileConversionStatusNormal
294 existingFile.ParsingStatus = fileParsingStatusByLibrary(isPersonalLibrary)
295 if err := existingFile.Update(); err != nil {
296 return 0, fmt.Errorf("更新文件记录失败: %v", err)
297 }
298 elasticsearch.SyncFileToES(existingFile, "update")
299 return existingFile.ID, nil
300 }
301
302 finalPath, err := dm.generateUniqueFileName(eid, libraryID, filePath)
303 if err != nil {
304 return 0, fmt.Errorf("生成唯一文件名失败: %v", err)
305 }
306
307 file := &model.File{
308 Path: finalPath,
309 Type: model.FILE_TYPE_FILE,
310 LibraryID: libraryID,
311 Eid: eid,
312 UploadFileID: uploadFileID,
313 Sort: 0,
314 ConversionStatus: model.FileConversionStatusNormal,
315 ParsingStatus: fileParsingStatusByLibrary(isPersonalLibrary),
316 UserID: userID,
317 }
318 applyFileOriginMeta(file, originType, originSource, originRefID)
319 if !file.IsRecordingOriginType() {
320 file.SetPersonalUploadOrigin(uploadFileID)
321 }
322
323 if err := file.Save(); err != nil {
324 return 0, fmt.Errorf("保存文件记录失败: %v", err)
325 }
326

Callers 1

Calls 15

GetDirectoryPathMethod · 0.95
IsRecordingOriginTypeMethod · 0.95
SaveMethod · 0.95
NewCleanupServiceFunction · 0.85
applyFileOriginMetaFunction · 0.85
NewFilePermissionServiceFunction · 0.85

Tested by

no test coverage detected