CreateBatch 创建批量上传会话
(eid, userID int64, req *BatchInitRequest)
| 193 | |
| 194 | // CreateBatch 创建批量上传会话 |
| 195 | func (m *BatchUploadManager) CreateBatch(eid, userID int64, req *BatchInitRequest) (*BatchUpload, []DuplicateFileInfo, error) { |
| 196 | dirManager := NewDirectoryManager() |
| 197 | if err := dirManager.CreateDirectoryTree(eid, req.LibraryID, req.FileStructure, req.BasePath, userID, req.OriginType, req.OriginSource, req.OriginRefID); err != nil { |
| 198 | return nil, nil, fmt.Errorf("创建目录结构失败: %v", err) |
| 199 | } |
| 200 | |
| 201 | batchID := m.generateBatchID() |
| 202 | uploadToken := m.generateUploadToken() |
| 203 | |
| 204 | files := make(map[string]*FileUpload) |
| 205 | var duplicateFiles []DuplicateFileInfo |
| 206 | |
| 207 | for _, item := range req.FileStructure { |
| 208 | if !item.IsDirectory { |
| 209 | fileID := m.generateFileID() |
| 210 | files[fileID] = &FileUpload{ |
| 211 | ID: fileID, |
| 212 | RelativePath: item.RelativePath, |
| 213 | Status: "queued", |
| 214 | Progress: 0, |
| 215 | TotalSize: item.Size, |
| 216 | StartTime: time.Now(), |
| 217 | UpdateTime: time.Now(), |
| 218 | SpeedHistory: make([]int64, 0), |
| 219 | } |
| 220 | |
| 221 | filePath := dirManager.GetDirectoryPath(req.BasePath, item.RelativePath) |
| 222 | if shouldAppendMarkdownSuffix() && filepath.Ext(filePath) != ".md" { |
| 223 | filePath += ".md" |
| 224 | } |
| 225 | existingFile, err := model.GetFileByPathAndLibraryNotDeleted(eid, req.LibraryID, filePath) |
| 226 | if err == nil && existingFile != nil { |
| 227 | duplicateFiles = append(duplicateFiles, DuplicateFileInfo{ |
| 228 | RelativePath: item.RelativePath, |
| 229 | ExistingID: existingFile.ID, |
| 230 | }) |
| 231 | } |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | batch := &BatchUpload{ |
| 236 | ID: batchID, |
| 237 | LibraryID: req.LibraryID, |
| 238 | UserID: userID, |
| 239 | EID: eid, |
| 240 | Status: "init", |
| 241 | TotalFiles: req.TotalFiles, |
| 242 | UploadedFiles: 0, |
| 243 | FailedFiles: 0, |
| 244 | Files: files, |
| 245 | UploadToken: uploadToken, |
| 246 | BasePath: req.BasePath, |
| 247 | OriginType: strings.TrimSpace(req.OriginType), |
| 248 | OriginSource: strings.TrimSpace(req.OriginSource), |
| 249 | OriginRefID: req.OriginRefID, |
| 250 | CreatedAt: time.Now(), |
| 251 | UpdatedAt: time.Now(), |
| 252 | } |
nothing calls this directly
no test coverage detected