diff --git a/src/main/java/ru/soune/nocopy/controller/ApiController.java b/src/main/java/ru/soune/nocopy/controller/ApiController.java index eb1d8a4..dbbe9df 100644 --- a/src/main/java/ru/soune/nocopy/controller/ApiController.java +++ b/src/main/java/ru/soune/nocopy/controller/ApiController.java @@ -20,11 +20,9 @@ import ru.soune.nocopy.dto.file.CompleteUploadResponse; 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.FileStatus; 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; +import ru.soune.nocopy.exception.*; import ru.soune.nocopy.handler.*; import ru.soune.nocopy.repository.AuthTokenRepository; import ru.soune.nocopy.service.file.FileEntityService; @@ -247,27 +245,62 @@ public class ApiController { @PathVariable(required = false) Integer version, @RequestHeader(value = "Authorization", required = false) String tokenHeader) { try { + if (tokenHeader == null) { + Map errorData = new HashMap<>(); + errorData.put("token", tokenHeader); + errorData.put("fileId", fileId); + errorData.put("version", version); + + return ResponseEntity.ok().body(new BaseResponse(20004, + MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getCode(), + MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getDescription(), + errorData)); + } + Long userId = getUserIdFromToken(tokenHeader); FileEntityResponse entityResponse = fileEntityService.getById(fileId, version); 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))); + Map errorData = new HashMap<>(); + errorData.put("token", tokenHeader); + + return ResponseEntity.ok().body(new BaseResponse(20004, + MessageCode.FILE_DOWNLOAD_ERROR.getCode(), + MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), + errorData)); + } + + if (entityResponse.getStatus().equals(FileStatus.DELETED)) { + Map errorData = new HashMap<>(); + errorData.put("file_status", entityResponse.getStatus()); + + return ResponseEntity.ok().body(new BaseResponse(20004, + MessageCode.FILE_DOWNLOAD_ERROR.getCode(), + MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), + errorData)); } if (!entityResponse.isExistsOnDisk()) { - return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(), + Map errorData = new HashMap<>(); + errorData.put("onDisk", entityResponse.isExistsOnDisk()); + + return ResponseEntity.ok().body(new BaseResponse(20004, + MessageCode.FILE_DOWNLOAD_ERROR.getCode(), MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), - Map.of("onDisk", entityResponse.isExistsOnDisk()))); + errorData)); } Path filePath = Paths.get(entityResponse.getFilePath()); Resource resource = new UrlResource(filePath.toUri()); if (!resource.exists()) { - return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(), + Map errorData = new HashMap<>(); + errorData.put("resource", resource.exists()); + + return ResponseEntity.ok().body(new BaseResponse(20004, + MessageCode.FILE_DOWNLOAD_ERROR.getCode(), MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), - Map.of("resource", resource.exists()))); + errorData)); } String contentType = determineContentType(filePath); @@ -279,17 +312,23 @@ public class ApiController { .header(HttpHeaders.CONTENT_LENGTH, String.valueOf(entityResponse.getFileSize())) .body(resource); } catch (FileEntityNotFoundException e) { + Map errorData = new HashMap<>(); + errorData.put("fileId", fileId); + return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_NOT_FOUND.getCode(), MessageCode.FILE_NOT_FOUND.getDescription(), - Map.of("fileId", fileId))); - } catch (Exception e) { + errorData)); + } catch (NotFoundAuthToken | IOException e) { + Map errorData = new HashMap<>(); + errorData.put("token", tokenHeader); + errorData.put("fileId", fileId); + errorData.put("version", version); + 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))); + errorData)); } } diff --git a/src/main/java/ru/soune/nocopy/dto/MessageCode.java b/src/main/java/ru/soune/nocopy/dto/MessageCode.java index eef129c..b945f64 100644 --- a/src/main/java/ru/soune/nocopy/dto/MessageCode.java +++ b/src/main/java/ru/soune/nocopy/dto/MessageCode.java @@ -9,7 +9,7 @@ public enum MessageCode { 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"), + FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD(2, "Not 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"),