@@ -20,11 +20,9 @@ import ru.soune.nocopy.dto.file.CompleteUploadResponse;
|
|||||||
import ru.soune.nocopy.dto.file.FileEntityResponse;
|
import ru.soune.nocopy.dto.file.FileEntityResponse;
|
||||||
import ru.soune.nocopy.dto.file.UploadProgress;
|
import ru.soune.nocopy.dto.file.UploadProgress;
|
||||||
import ru.soune.nocopy.entity.AuthToken;
|
import ru.soune.nocopy.entity.AuthToken;
|
||||||
|
import ru.soune.nocopy.entity.file.FileStatus;
|
||||||
import ru.soune.nocopy.entity.file.UploadStatus;
|
import ru.soune.nocopy.entity.file.UploadStatus;
|
||||||
import ru.soune.nocopy.exception.FileEntityNotFoundException;
|
import ru.soune.nocopy.exception.*;
|
||||||
import ru.soune.nocopy.exception.NotFoundAuthToken;
|
|
||||||
import ru.soune.nocopy.exception.NotValidFieldException;
|
|
||||||
import ru.soune.nocopy.exception.ValidationException;
|
|
||||||
import ru.soune.nocopy.handler.*;
|
import ru.soune.nocopy.handler.*;
|
||||||
import ru.soune.nocopy.repository.AuthTokenRepository;
|
import ru.soune.nocopy.repository.AuthTokenRepository;
|
||||||
import ru.soune.nocopy.service.file.FileEntityService;
|
import ru.soune.nocopy.service.file.FileEntityService;
|
||||||
@@ -247,27 +245,62 @@ public class ApiController {
|
|||||||
@PathVariable(required = false) Integer version,
|
@PathVariable(required = false) Integer version,
|
||||||
@RequestHeader(value = "Authorization", required = false) String tokenHeader) {
|
@RequestHeader(value = "Authorization", required = false) String tokenHeader) {
|
||||||
try {
|
try {
|
||||||
|
if (tokenHeader == null) {
|
||||||
|
Map<String, Object> 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);
|
Long userId = getUserIdFromToken(tokenHeader);
|
||||||
FileEntityResponse entityResponse = fileEntityService.getById(fileId, version);
|
FileEntityResponse entityResponse = fileEntityService.getById(fileId, version);
|
||||||
|
|
||||||
if (!entityResponse.getUserId().equals(userId)) {
|
if (!entityResponse.getUserId().equals(userId)) {
|
||||||
return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(),
|
Map<String, Object> errorData = new HashMap<>();
|
||||||
MessageCode.FILE_DOWNLOAD_ERROR.getDescription(), Map.of("token", tokenHeader)));
|
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<String, Object> 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()) {
|
if (!entityResponse.isExistsOnDisk()) {
|
||||||
return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(),
|
Map<String, Object> 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(),
|
MessageCode.FILE_DOWNLOAD_ERROR.getDescription(),
|
||||||
Map.of("onDisk", entityResponse.isExistsOnDisk())));
|
errorData));
|
||||||
}
|
}
|
||||||
|
|
||||||
Path filePath = Paths.get(entityResponse.getFilePath());
|
Path filePath = Paths.get(entityResponse.getFilePath());
|
||||||
Resource resource = new UrlResource(filePath.toUri());
|
Resource resource = new UrlResource(filePath.toUri());
|
||||||
|
|
||||||
if (!resource.exists()) {
|
if (!resource.exists()) {
|
||||||
return ResponseEntity.ok().body(new BaseResponse(20004, MessageCode.FILE_DOWNLOAD_ERROR.getCode(),
|
Map<String, Object> 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(),
|
MessageCode.FILE_DOWNLOAD_ERROR.getDescription(),
|
||||||
Map.of("resource", resource.exists())));
|
errorData));
|
||||||
}
|
}
|
||||||
|
|
||||||
String contentType = determineContentType(filePath);
|
String contentType = determineContentType(filePath);
|
||||||
@@ -279,17 +312,23 @@ public class ApiController {
|
|||||||
.header(HttpHeaders.CONTENT_LENGTH, String.valueOf(entityResponse.getFileSize()))
|
.header(HttpHeaders.CONTENT_LENGTH, String.valueOf(entityResponse.getFileSize()))
|
||||||
.body(resource);
|
.body(resource);
|
||||||
} catch (FileEntityNotFoundException e) {
|
} catch (FileEntityNotFoundException e) {
|
||||||
|
Map<String, Object> errorData = new HashMap<>();
|
||||||
|
errorData.put("fileId", fileId);
|
||||||
|
|
||||||
return ResponseEntity.ok().body(new BaseResponse(20004,
|
return ResponseEntity.ok().body(new BaseResponse(20004,
|
||||||
MessageCode.FILE_NOT_FOUND.getCode(),
|
MessageCode.FILE_NOT_FOUND.getCode(),
|
||||||
MessageCode.FILE_NOT_FOUND.getDescription(),
|
MessageCode.FILE_NOT_FOUND.getDescription(),
|
||||||
Map.of("fileId", fileId)));
|
errorData));
|
||||||
} catch (Exception e) {
|
} catch (NotFoundAuthToken | IOException e) {
|
||||||
|
Map<String, Object> errorData = new HashMap<>();
|
||||||
|
errorData.put("token", tokenHeader);
|
||||||
|
errorData.put("fileId", fileId);
|
||||||
|
errorData.put("version", version);
|
||||||
|
|
||||||
return ResponseEntity.ok().body(new BaseResponse(20004,
|
return ResponseEntity.ok().body(new BaseResponse(20004,
|
||||||
MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getCode(),
|
MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getCode(),
|
||||||
MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getDescription(),
|
MessageCode.FILE_DOWNLOAD_ERROR_NOT_CORRECT_FIELD.getDescription(),
|
||||||
Map.of("token", tokenHeader,
|
errorData));
|
||||||
"fileId", fileId,
|
|
||||||
"version", version)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public enum MessageCode {
|
|||||||
INVALID_ACTION(2, "Invalid action"),
|
INVALID_ACTION(2, "Invalid action"),
|
||||||
FILE_UPLOAD_ERROR(2, "File upload error"),
|
FILE_UPLOAD_ERROR(2, "File upload error"),
|
||||||
FILE_DOWNLOAD_ERROR(2, "File download 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"),
|
INVALID_JSON_BODY(2, "Invalid fields in JSON object"),
|
||||||
INCOMPLETE_UPLOAD(2, "Not load all chunks"),
|
INCOMPLETE_UPLOAD(2, "Not load all chunks"),
|
||||||
MSG_ID_NOT_FOUND(4, "Message id not found"),
|
MSG_ID_NOT_FOUND(4, "Message id not found"),
|
||||||
|
|||||||
Reference in New Issue
Block a user