From a2c20ae645140cdab9811bd253e5fd789949950a Mon Sep 17 00:00:00 2001 From: vladp Date: Fri, 26 Dec 2025 12:22:40 +0700 Subject: [PATCH] add exceptions --- .../nocopy/controller/ApiController.java | 50 +++++++++++-------- .../java/ru/soune/nocopy/dto/MessageCode.java | 2 + 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/controller/ApiController.java b/src/main/java/ru/soune/nocopy/controller/ApiController.java index 20ca112..eb1d8a4 100644 --- a/src/main/java/ru/soune/nocopy/controller/ApiController.java +++ b/src/main/java/ru/soune/nocopy/controller/ApiController.java @@ -21,6 +21,7 @@ import ru.soune.nocopy.dto.file.FileEntityResponse; import ru.soune.nocopy.dto.file.UploadProgress; import ru.soune.nocopy.entity.AuthToken; import ru.soune.nocopy.entity.file.UploadStatus; +import ru.soune.nocopy.exception.FileEntityNotFoundException; import ru.soune.nocopy.exception.NotFoundAuthToken; import ru.soune.nocopy.exception.NotValidFieldException; import ru.soune.nocopy.exception.ValidationException; @@ -241,29 +242,32 @@ public class ApiController { @GetMapping("/v{version}/files/download/{fileId}") - public ResponseEntity downloadFile( - @PathVariable String fileId, - @PathVariable Integer version, - @RequestHeader("Authorization") String tokenHeader) { - + public ResponseEntity downloadFile( + @PathVariable(required = false) String fileId, + @PathVariable(required = false) Integer version, + @RequestHeader(value = "Authorization", required = false) String tokenHeader) { try { Long userId = getUserIdFromToken(tokenHeader); - FileEntityResponse fileInfo = fileEntityService.getById(fileId, version); + FileEntityResponse entityResponse = fileEntityService.getById(fileId, version); - if (!fileInfo.getUserId().equals(userId)) { - return ResponseEntity.status(403).build(); + if (!entityResponse.getUserId().equals(userId)) { + return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(), + MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), Map.of("token", tokenHeader))); } - if (!fileInfo.isExistsOnDisk()) { - return ResponseEntity.status(404) - .body(null); + if (!entityResponse.isExistsOnDisk()) { + return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(), + MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), + Map.of("onDisk", entityResponse.isExistsOnDisk()))); } - Path filePath = Paths.get(fileInfo.getFilePath()); + Path filePath = Paths.get(entityResponse.getFilePath()); Resource resource = new UrlResource(filePath.toUri()); if (!resource.exists()) { - return ResponseEntity.status(404).build(); + return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(), + MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), + Map.of("resource", resource.exists()))); } String contentType = determineContentType(filePath); @@ -271,15 +275,21 @@ public class ApiController { return ResponseEntity.ok() .contentType(MediaType.parseMediaType(contentType)) .header(HttpHeaders.CONTENT_DISPOSITION, - "attachment; filename=\"" + fileInfo.getOriginalFileName() + "\"") - .header(HttpHeaders.CONTENT_LENGTH, String.valueOf(fileInfo.getFileSize())) + "attachment; filename=\"" + entityResponse.getOriginalFileName() + "\"") + .header(HttpHeaders.CONTENT_LENGTH, String.valueOf(entityResponse.getFileSize())) .body(resource); - - } catch (NotFoundAuthToken e) { - return ResponseEntity.status(401).build(); + } catch (FileEntityNotFoundException e) { + return ResponseEntity.ok().body(new BaseResponse(20004, + MessageCode.FILE_NOT_FOUND.getCode(), + MessageCode.FILE_NOT_FOUND.getDescription(), + Map.of("fileId", fileId))); } catch (Exception e) { - log.error("Error downloading file", e); - return ResponseEntity.status(500).build(); + return ResponseEntity.ok().body(new BaseResponse(20004, + MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getCode(), + MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getDescription(), + Map.of("token", tokenHeader, + "fileId", fileId, + "version", version))); } } diff --git a/src/main/java/ru/soune/nocopy/dto/MessageCode.java b/src/main/java/ru/soune/nocopy/dto/MessageCode.java index a3ac162..eef129c 100644 --- a/src/main/java/ru/soune/nocopy/dto/MessageCode.java +++ b/src/main/java/ru/soune/nocopy/dto/MessageCode.java @@ -8,6 +8,8 @@ public enum MessageCode { INVALID_TOKEN(2, "Invalid token"), INVALID_ACTION(2, "Invalid action"), FILE_UPLOAD_ERROR(2, "File upload error"), + FILE_DOWNLOAD_ERROR(2, "File download error"), + FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD(2, "File download error with correct field"), INVALID_JSON_BODY(2, "Invalid fields in JSON object"), INCOMPLETE_UPLOAD(2, "Not load all chunks"), MSG_ID_NOT_FOUND(4, "Message id not found"),