()
| 448 | } |
| 449 | |
| 450 | func (file *File) Save() error { |
| 451 | pathStr := file.GetPath() |
| 452 | if pathStr == "" { |
| 453 | return errors.New("file path is empty") |
| 454 | } |
| 455 | if file.Type == FILE_TYPE_FILE { |
| 456 | if path.Ext(pathStr) == "" { |
| 457 | return errors.New("file path must contain filename and extension") |
| 458 | } |
| 459 | } |
| 460 | if file.Type == FILE_TYPE_DIR { |
| 461 | cleanPath := path.Clean(pathStr) |
| 462 | isDirBool := isDir(cleanPath) |
| 463 | if !isDirBool { |
| 464 | return errors.New("file path is not a directory") |
| 465 | } |
| 466 | } |
| 467 | |
| 468 | // 检查路径是否已存在(在同一知识库内)- 不再检查,直接创建 |
| 469 | // existingFile, err := GetFileByPathAndLibrary(file.Eid, file.LibraryID, pathStr) |
| 470 | // if err == nil && existingFile != nil { |
| 471 | // return errors.New("file path already exists in this library") |
| 472 | // } |
| 473 | |
| 474 | file.Path = pathStr |
| 475 | if strings.TrimSpace(file.OriginType) == "" { |
| 476 | if file.UploadFileID > 0 { |
| 477 | file.SetPersonalUploadOrigin(file.UploadFileID) |
| 478 | } else { |
| 479 | file.SetManualCreateOrigin() |
| 480 | if library, err := GetLibraryByID(file.Eid, file.LibraryID); err == nil && library != nil && library.IsPersonalLibrary() { |
| 481 | file.OriginSource = FileOriginSourceLocal |
| 482 | } |
| 483 | } |
| 484 | } else if file.OriginType == FileOriginTypeManualCreate { |
| 485 | file.OriginRefID = 0 |
| 486 | if library, err := GetLibraryByID(file.Eid, file.LibraryID); err == nil && library != nil && library.IsPersonalLibrary() { |
| 487 | file.OriginSource = FileOriginSourceLocal |
| 488 | } else if strings.TrimSpace(file.OriginSource) == "" { |
| 489 | file.OriginSource = FileOriginSourceDirect |
| 490 | } |
| 491 | } else if file.OriginType == FileOriginTypePersonalUpload && strings.TrimSpace(file.OriginSource) == "" { |
| 492 | file.OriginSource = FileOriginSourceLocal |
| 493 | } else if file.IsRecordingOriginType() && strings.TrimSpace(file.OriginSource) == "" { |
| 494 | if file.OriginType == FileOriginTypeRecordingImported { |
| 495 | file.OriginSource = FileOriginSourceRecordingImport |
| 496 | } else { |
| 497 | file.OriginSource = FileOriginSourceRecording |
| 498 | } |
| 499 | } |
| 500 | // 统一默认状态:若为空则填充为 normal(应用层规范化,避免依赖DB默认) |
| 501 | if strings.TrimSpace(file.ConversionStatus) == "" { |
| 502 | file.ConversionStatus = FileConversionStatusNormal |
| 503 | } |
| 504 | if strings.TrimSpace(file.ParsingStatus) == "" { |
| 505 | file.ParsingStatus = FileParsingStatusNormal |
| 506 | } |
| 507 | result := DB.Create(file) |
no test coverage detected