Merge branch 'NCBACK-18' into NCBACK-15
# Conflicts: # src/main/java/ru/soune/nocopy/controller/AuthController.java # src/main/java/ru/soune/nocopy/controller/file/FileUploadController.java # src/main/java/ru/soune/nocopy/dto/AuthResponse.java # src/main/java/ru/soune/nocopy/dto/LoginResponse.java # src/main/java/ru/soune/nocopy/dto/RegisterRequest.java # src/main/java/ru/soune/nocopy/exception/UserAlreadyExistsException.java # src/main/java/ru/soune/nocopy/service/AuthService.java # src/test/java/ru/soune/nocopy/service/AuthServiceTest.java
This commit is contained in:
@@ -3,6 +3,7 @@ package ru.soune.nocopy.service.file;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -56,6 +57,9 @@ public class FileUploadServiceImpl implements FileUploadService {
|
||||
|
||||
private Path storageRoot;
|
||||
|
||||
@Autowired
|
||||
private FileEntityService fileEntityService;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
try {
|
||||
@@ -328,14 +332,46 @@ public class FileUploadServiceImpl implements FileUploadService {
|
||||
}
|
||||
}
|
||||
|
||||
// private void assembleFile(FileUploadSession session) throws IOException {
|
||||
// log.info("Starting file assembly for session: {} ({})",
|
||||
// session.getUploadId(), session.getFileName());
|
||||
//
|
||||
// Path finalFilePath = null;
|
||||
//
|
||||
// try {
|
||||
// finalFilePath = prepareFinalFile(session);
|
||||
//
|
||||
// validateAllChunksExist(session);
|
||||
//
|
||||
// mergeChunksToFile(session, finalFilePath);
|
||||
//
|
||||
// validateFinalFile(session, finalFilePath);
|
||||
//
|
||||
// updateSessionOnSuccess(session, finalFilePath);
|
||||
//
|
||||
// cleanupSessionFiles(session);
|
||||
//
|
||||
// log.info("File assembly completed: {} -> {} ({} bytes)",
|
||||
// session.getFileName(), finalFilePath, session.getFileSize());
|
||||
//
|
||||
// } catch (Exception e) {
|
||||
// if (finalFilePath != null) {
|
||||
// Files.deleteIfExists(finalFilePath);
|
||||
// }
|
||||
// throw e;
|
||||
// }
|
||||
// }
|
||||
|
||||
private void assembleFile(FileUploadSession session) throws IOException {
|
||||
log.info("Starting file assembly for session: {} ({})",
|
||||
session.getUploadId(), session.getFileName());
|
||||
|
||||
Path finalFilePath = null;
|
||||
String checksum = null;
|
||||
|
||||
try {
|
||||
finalFilePath = prepareFinalFile(session);
|
||||
log.info("Final file path: {}", finalFilePath);
|
||||
|
||||
validateAllChunksExist(session);
|
||||
|
||||
@@ -343,18 +379,48 @@ public class FileUploadServiceImpl implements FileUploadService {
|
||||
|
||||
validateFinalFile(session, finalFilePath);
|
||||
|
||||
updateSessionOnSuccess(session, finalFilePath);
|
||||
checksum = calculateChecksum(finalFilePath);
|
||||
log.debug("File checksum calculated: {}", checksum);
|
||||
|
||||
session.setFilePath(finalFilePath.toString());
|
||||
session.setChecksum(checksum);
|
||||
session.setStatus(UploadStatus.COMPLETED);
|
||||
session.setCompletedAt(LocalDateTime.now());
|
||||
sessionRepository.save(session);
|
||||
log.info("Upload session updated to COMPLETED: {}", session.getUploadId());
|
||||
|
||||
try {
|
||||
fileEntityService.createFromUploadSession(session, checksum);
|
||||
log.info("FileEntity successfully created for session: {}",
|
||||
session.getUploadId());
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to create FileEntity for session {} (file uploaded, but metadata not saved): {}",
|
||||
session.getUploadId(), e.getMessage());
|
||||
}
|
||||
|
||||
cleanupSessionFiles(session);
|
||||
|
||||
log.info("File assembly completed: {} -> {} ({} bytes)",
|
||||
log.info("File assembly completed successfully: {} -> {} ({} bytes)",
|
||||
session.getFileName(), finalFilePath, session.getFileSize());
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("File assembly failed for session {}: {}",
|
||||
session.getUploadId(), e.getMessage(), e);
|
||||
|
||||
if (finalFilePath != null) {
|
||||
Files.deleteIfExists(finalFilePath);
|
||||
try {
|
||||
Files.deleteIfExists(finalFilePath);
|
||||
log.debug("Cleaned up partial file: {}", finalFilePath);
|
||||
} catch (IOException ioException) {
|
||||
log.warn("Failed to cleanup partial file: {}", finalFilePath, ioException);
|
||||
}
|
||||
}
|
||||
throw e;
|
||||
|
||||
session.setStatus(UploadStatus.FAILED);
|
||||
session.setLastError(e.getMessage());
|
||||
sessionRepository.save(session);
|
||||
|
||||
throw new IOException("File assembly failed: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user