Used throwing for set method
This commit is contained in:
parent
16c286eac0
commit
b3102a17f8
2 changed files with 46 additions and 48 deletions
|
|
@ -9,6 +9,7 @@ import ru.nbch.credit_tracker.entities.request.active_packages.MonitoringActiveP
|
|||
import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse;
|
||||
import ru.nbch.credit_tracker.entities.response.success.MonitoringPackageDeleteResponse;
|
||||
import ru.nbch.credit_tracker.entities.response.success.MonitoringReportListResponse;
|
||||
import ru.nbch.credit_tracker.entities.response.success.MonitoringResponse;
|
||||
import ru.nbch.credit_tracker.facade.SignalFacade;
|
||||
|
||||
@RestController
|
||||
|
|
@ -22,7 +23,7 @@ public class SignalController {
|
|||
}
|
||||
|
||||
@PostMapping(value = "/set", produces = MediaType.APPLICATION_XML_VALUE)
|
||||
public ResponseEntity<Resource> setupMonitoring(@RequestParam("file") MultipartFile file) {
|
||||
public ResponseEntity<MonitoringResponse> setupMonitoring(@RequestParam("file") MultipartFile file) {
|
||||
return signalFacade.setupMonitoring(file);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,10 +12,7 @@ import ru.nbch.credit_tracker.entities.request.active_packages.MonitoringActiveP
|
|||
import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest;
|
||||
import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject;
|
||||
import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringActivePackagesError;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringDownloadError;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringPackageDeleteError;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringReportListError;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.*;
|
||||
import ru.nbch.credit_tracker.entities.response.success.MonitoringPackageDeleteResponse;
|
||||
import ru.nbch.credit_tracker.entities.response.success.MonitoringReportListResponse;
|
||||
import ru.nbch.credit_tracker.entities.response.success.MonitoringResponse;
|
||||
|
|
@ -76,14 +73,14 @@ public class SignalFacade {
|
|||
this.executor = executor;
|
||||
}
|
||||
|
||||
public ResponseEntity<Resource> setupMonitoring(MultipartFile file) {
|
||||
public ResponseEntity<MonitoringResponse> setupMonitoring(MultipartFile file) {
|
||||
// первичные валидации
|
||||
if (file.isEmpty()) {
|
||||
return getBadResponse(SignalError.ERROR_001);
|
||||
throw new SignalErrorException(SignalError.ERROR_001, null, new MonitoringError(), true);
|
||||
}
|
||||
|
||||
if (!isZipFile(file)) {
|
||||
return getBadResponse(SignalError.ERROR_001);
|
||||
throw new SignalErrorException(SignalError.ERROR_001, null, new MonitoringError(), true);
|
||||
}
|
||||
|
||||
// Валидация Архива на количетсво файлов, размер и расширение
|
||||
|
|
@ -96,33 +93,35 @@ public class SignalFacade {
|
|||
if (!entry.isDirectory()) {
|
||||
fileCount++;
|
||||
if (fileCount > 1) { // Архив должен содержать ровно один XML-файл
|
||||
return getBadResponse(SignalError.ERROR_001);
|
||||
throw new SignalErrorException(SignalError.ERROR_001, null, new MonitoringError(), true);
|
||||
}
|
||||
|
||||
if (!entry.getName().toLowerCase().endsWith(".xml")) { // Файл должен быть с расширением xml
|
||||
return getBadResponse(SignalError.ERROR_001);
|
||||
throw new SignalErrorException(SignalError.ERROR_001, null, new MonitoringError(), true);
|
||||
}
|
||||
|
||||
xmlEntry = entry;
|
||||
} else {
|
||||
return getBadResponse(SignalError.ERROR_001); // Архив должен содержать ровно один XML-файл. Никаких доп директорий
|
||||
throw new SignalErrorException(SignalError.ERROR_001, null, new MonitoringError(), true); // Архив должен содержать ровно один XML-файл. Никаких доп директорий
|
||||
}
|
||||
zipInputStream.closeEntry();
|
||||
entry = zipInputStream.getNextEntry();
|
||||
}
|
||||
|
||||
if (fileCount == 0) { // Архив должен содержать ровно один XML-файл
|
||||
return getBadResponse(SignalError.ERROR_001);
|
||||
throw new SignalErrorException(SignalError.ERROR_001, null, new MonitoringError(), true);
|
||||
}
|
||||
|
||||
if (xmlEntry.getSize() > MAX_XML_FILE_SIZE) { // максимально 2 Гб до запаковки
|
||||
return getBadResponse(SignalError.ERROR_009);
|
||||
throw new SignalErrorException(SignalError.ERROR_009, null, new MonitoringError(), true);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
if (e instanceof SignalErrorException) {
|
||||
throw (SignalErrorException) e;
|
||||
}
|
||||
log.error(e.getMessage(), e);
|
||||
Resource answer = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||
return ResponseEntity.internalServerError().body(answer);
|
||||
throw new SignalErrorException(SignalError.ERROR_100, null, new MonitoringError(), false);
|
||||
}
|
||||
|
||||
// Теперь знаем, что в архиве лежит ровно один файл с раширением xml и он весит меньше 2гб. Можно валидировать сам xml
|
||||
|
|
@ -136,16 +135,19 @@ public class SignalFacade {
|
|||
monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class);
|
||||
|
||||
} catch (Exception e) {
|
||||
if (e instanceof SignalErrorException) {
|
||||
throw (SignalErrorException) e;
|
||||
}
|
||||
log.error(e.getMessage(), e);
|
||||
Resource answer = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||
return ResponseEntity.internalServerError().body(answer);
|
||||
throw new SignalErrorException(SignalError.ERROR_100, null, new MonitoringError(), false);
|
||||
}
|
||||
|
||||
// валидация xml
|
||||
ResponseEntity<Resource> errorResponse = validateMonitoringRequest(monitoringRequest);
|
||||
if (errorResponse != null) {
|
||||
try {
|
||||
validateMonitoringRequest(monitoringRequest);
|
||||
} catch (SignalErrorException e) {
|
||||
signalService.rejectPackage(monitoringRequest);
|
||||
return errorResponse;
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
@ -153,85 +155,80 @@ public class SignalFacade {
|
|||
AuthorizationService.AuthResult authResult = authorizationService.findAuthInfo(monitoringRequest.getUserId(), monitoringRequest.getPassword());
|
||||
if (!authResult.isSuccess()) {
|
||||
signalService.rejectPackage(monitoringRequest);
|
||||
return getBadResponse(authResult.getError());
|
||||
throw new SignalErrorException(authResult.getError(), null, new MonitoringError(), false);
|
||||
}
|
||||
|
||||
// проверка на уникальность пакета
|
||||
if (signalService.isPackageNotUnique(monitoringRequest)) {
|
||||
signalService.rejectPackage(monitoringRequest);
|
||||
return getBadResponse(SignalError.ERROR_007);
|
||||
throw new SignalErrorException(SignalError.ERROR_007, null, new MonitoringError(), false);
|
||||
}
|
||||
|
||||
packageId = signalService.registerPackage(monitoringRequest);
|
||||
} catch (Exception e) {
|
||||
if (e instanceof SignalErrorException) {
|
||||
throw (SignalErrorException) e;
|
||||
}
|
||||
log.error(e.getMessage(), e);
|
||||
Resource answer = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||
return ResponseEntity.internalServerError().body(answer);
|
||||
throw new SignalErrorException(SignalError.ERROR_100, null, new MonitoringError(), false);
|
||||
}
|
||||
|
||||
// в отдельном потоке запускаем поиск фидов и расчет флагов просрочек
|
||||
registerFidsAndDebts(packageId);
|
||||
|
||||
return ResponseEntity.ok().body(successAnswerGenerator.generateSuccessAnswer(MonitoringResponse.class));
|
||||
return ResponseEntity.ok().body(new MonitoringResponse());
|
||||
}
|
||||
|
||||
private ResponseEntity<Resource> validateMonitoringRequest(MonitoringRequest request) {
|
||||
private void validateMonitoringRequest(MonitoringRequest request) throws SignalErrorException {
|
||||
if (request == null) {
|
||||
return getBadResponse(SignalError.ERROR_011);
|
||||
throw new SignalErrorException(SignalError.ERROR_011, null, new MonitoringError(), false);
|
||||
}
|
||||
|
||||
ResponseEntity<Resource> errorResponse = validateReruqredTags(request);
|
||||
if (errorResponse != null) {
|
||||
return errorResponse;
|
||||
validateReruqredTags(request);
|
||||
|
||||
validateTagsTypes(request);
|
||||
}
|
||||
|
||||
return validateTagsTypes(request);
|
||||
}
|
||||
|
||||
ResponseEntity<Resource> validateReruqredTags(MonitoringRequest request) {
|
||||
private void validateReruqredTags(MonitoringRequest request) throws SignalErrorException {
|
||||
if (request.getUserId() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002, "UserId");
|
||||
throw new SignalErrorException(SignalError.ERROR_002, "UserId", new MonitoringError(), true);
|
||||
}
|
||||
|
||||
if (request.getPackageName() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002, "PackageName");
|
||||
throw new SignalErrorException(SignalError.ERROR_002, "PackageName", new MonitoringError(), true);
|
||||
}
|
||||
|
||||
if (request.getPassword() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002, "Password");
|
||||
throw new SignalErrorException(SignalError.ERROR_002, "Password", new MonitoringError(), true);
|
||||
}
|
||||
|
||||
if (request.getSubjects() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002, "Subjects");
|
||||
throw new SignalErrorException(SignalError.ERROR_002, "Subjects", new MonitoringError(), true);
|
||||
}
|
||||
|
||||
if (request.getSubjects().getSubject().isEmpty()) {
|
||||
return getBadResponse(SignalError.ERROR_002, "Subject");
|
||||
throw new SignalErrorException(SignalError.ERROR_002, "Subject", new MonitoringError(), true);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private ResponseEntity<Resource> validateTagsTypes(MonitoringRequest request) {
|
||||
private void validateTagsTypes(MonitoringRequest request) throws SignalErrorException {
|
||||
if (!ValidationUtil.validatePackageName(request.getPackageName())) {
|
||||
return getBadResponse(SignalError.ERROR_008);
|
||||
throw new SignalErrorException(SignalError.ERROR_008, null, new MonitoringError(), true);
|
||||
}
|
||||
|
||||
Set<String> uniqueIds = new HashSet<>();
|
||||
for (Subject subject : request.getSubjects().getSubject()) {
|
||||
if (!ValidationUtil.validatePhone(subject.getClientId())) {
|
||||
return getBadResponse(SignalError.ERROR_003);
|
||||
throw new SignalErrorException(SignalError.ERROR_003, null, new MonitoringError(), true);
|
||||
}
|
||||
if (!ValidationUtil.validateNPId(subject.getId())) {
|
||||
return getBadResponse(SignalError.ERROR_010);
|
||||
throw new SignalErrorException(SignalError.ERROR_010, null, new MonitoringError(), true);
|
||||
}
|
||||
// проверка на уникальность Id внутри одного пакета
|
||||
if (!uniqueIds.add(subject.getId())) {
|
||||
return getBadResponse(SignalError.ERROR_004, subject.getId());
|
||||
throw new SignalErrorException(SignalError.ERROR_004, subject.getId(), new MonitoringError(), true);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void registerFidsAndDebts(Integer packageId) {
|
||||
|
|
@ -291,7 +288,7 @@ public class SignalFacade {
|
|||
|
||||
public ResponseEntity<MonitoringPackageDeleteResponse> deletePackage(String username, String packageName) {
|
||||
try {
|
||||
if(!signalService.isPackageExists(username, packageName)) {
|
||||
if (!signalService.isPackageExists(username, packageName)) {
|
||||
throw new SignalErrorException(SignalError.ERROR_016, packageName, new MonitoringPackageDeleteError(), true);
|
||||
}
|
||||
MonitoringPackageDeleteResponse response = signalService.deletePackage(username, packageName);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue