dev
Test Workflow / test (push) Successful in 3s

This commit is contained in:
vladp
2026-01-26 14:28:47 +07:00
parent 82eedb02d1
commit 4c8c4bb5c1
2 changed files with 35 additions and 53 deletions
@@ -10,14 +10,13 @@ public interface FileUploadService {
FileUploadSession initUpload(Long userId, String fileName, FileUploadSession initUpload(Long userId, String fileName,
String fileType, String extension, long fileSize); String fileType, String extension, long fileSize);
UploadProgressResponse uploadChunk(String uploadId, Integer chunkNumber,
MultipartFile chunkFile) throws IOException;
UploadProgressResponse getUploadProgress(String uploadId);
void handleExpiredSession(FileUploadSession session); void handleExpiredSession(FileUploadSession session);
void cancelUpload(String uploadId); void cancelUpload(String uploadId);
void uploadChunk(String uploadId, Integer chunkNumber, MultipartFile chunkFile);
UploadProgressResponse getUploadProgress(String uploadId);
void completeFileProcessingAsync(FileUploadSession session); void completeFileProcessingAsync(FileUploadSession session);
} }
@@ -149,7 +149,35 @@ public class FileUploadServiceImpl implements FileUploadService {
@Override @Override
@Transactional @Transactional
public UploadProgressResponse uploadChunk(String uploadId, Integer chunkNumber, public void handleExpiredSession(FileUploadSession session) {
session.setStatus(UploadStatus.FAILED);
session.setLastError("Upload session expired");
sessionRepository.save(session);
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
}
@Override
@Transactional
public void cancelUpload(String uploadId) {
FileUploadSession session = sessionRepository.findById(uploadId)
.orElseThrow(() -> new UploadSessionNotFoundException(uploadId));
if (session.getStatus() == UploadStatus.COMPLETED || session.getStatus() == UploadStatus.CANCELLED) {
throw new FileUploadException("Cannot cancel completed or cancelled upload");
}
session.setStatus(UploadStatus.CANCELLED);
sessionRepository.save(session);
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
log.info("Upload cancelled: {}", uploadId);
}
@Override
@Transactional
public void uploadChunk(String uploadId, Integer chunkNumber,
MultipartFile chunkFile) { MultipartFile chunkFile) {
FileUploadSession session = sessionRepository.findById(uploadId) FileUploadSession session = sessionRepository.findById(uploadId)
.orElseThrow(() -> new UploadSessionNotFoundException(uploadId)); .orElseThrow(() -> new UploadSessionNotFoundException(uploadId));
@@ -176,52 +204,7 @@ public class FileUploadServiceImpl implements FileUploadService {
throw new ChunkSizeExceededException(chunkFile.getSize(), chunkSize); throw new ChunkSizeExceededException(chunkFile.getSize(), chunkSize);
} }
return processChunk(session, chunkNumber, chunkFile); processChunk(session, chunkNumber, chunkFile);
}
@Override
@Transactional
public void handleExpiredSession(FileUploadSession session) {
session.setStatus(UploadStatus.FAILED);
session.setLastError("Upload session expired");
sessionRepository.save(session);
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
}
// @Async("fileUploadTaskExecutor")
// @Transactional
// public void assembleFileAsync(FileUploadSession session) throws DuplicateImageException {
// try {
// assembleFile(session);
// log.info("File assembly completed successfully for session: {}",
// session.getUploadId());
// } catch (DuplicateImageException e) {
// throw new DuplicateImageException("DUBL", e.duplicateFileId(), e.userId());
// } catch (Exception e) {
// log.error("Failed to assemble file for session {}: {}",
// session.getUploadId(), e.getMessage(), e);
//
// handleAssemblyFailure(session, e);
// }
// }
@Override
@Transactional
public void cancelUpload(String uploadId) {
FileUploadSession session = sessionRepository.findById(uploadId)
.orElseThrow(() -> new UploadSessionNotFoundException(uploadId));
if (session.getStatus() == UploadStatus.COMPLETED || session.getStatus() == UploadStatus.CANCELLED) {
throw new FileUploadException("Cannot cancel completed or cancelled upload");
}
session.setStatus(UploadStatus.CANCELLED);
sessionRepository.save(session);
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
log.info("Upload cancelled: {}", uploadId);
} }
@Override @Override