diff --git a/src/main/java/ru/soune/nocopy/service/file/FileUploadService.java b/src/main/java/ru/soune/nocopy/service/file/FileUploadService.java index 5434dfb..d233b63 100644 --- a/src/main/java/ru/soune/nocopy/service/file/FileUploadService.java +++ b/src/main/java/ru/soune/nocopy/service/file/FileUploadService.java @@ -10,14 +10,13 @@ public interface FileUploadService { FileUploadSession initUpload(Long userId, String fileName, 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 cancelUpload(String uploadId); + void uploadChunk(String uploadId, Integer chunkNumber, MultipartFile chunkFile); + + UploadProgressResponse getUploadProgress(String uploadId); + void completeFileProcessingAsync(FileUploadSession session); } diff --git a/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java b/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java index 381b3a2..862a511 100644 --- a/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java +++ b/src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java @@ -149,8 +149,36 @@ public class FileUploadServiceImpl implements FileUploadService { @Override @Transactional - public UploadProgressResponse uploadChunk(String uploadId, Integer chunkNumber, - MultipartFile chunkFile) { + 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) { FileUploadSession session = sessionRepository.findById(uploadId) .orElseThrow(() -> new UploadSessionNotFoundException(uploadId)); @@ -176,52 +204,7 @@ public class FileUploadServiceImpl implements FileUploadService { throw new ChunkSizeExceededException(chunkFile.getSize(), chunkSize); } - return 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); + processChunk(session, chunkNumber, chunkFile); } @Override