CreateFileRecord 在数据库中创建文件记录
(eid, libraryID int64, relativePath string, uploadFileID int64, basePath string, userID int64, duplicateMode DuplicateMode, isPersonalLibrary bool, originType string, originSource string, originRefID int64)
| 267 | |
| 268 | // CreateFileRecord 在数据库中创建文件记录 |
| 269 | func (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 |
no test coverage detected