From b4c44753984fff975ad732355620feb6557ed768 Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Wed, 2 Jul 2025 12:01:31 +0300 Subject: [PATCH] Moved monitoring request validation to ValidationUtil --- .../credit_tracker/facade/SignalFacade.java | 63 +------------------ .../credit_tracker/utils/ValidationUtil.java | 59 ++++++++++++++++- 2 files changed, 59 insertions(+), 63 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index ca1ffdc..57787e3 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -10,7 +10,6 @@ import org.springframework.web.multipart.MultipartFile; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.entities.request.active_packages.MonitoringActivePackagesRequest; 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.success.MonitoringPackageDeleteResponse; import ru.nbch.credit_tracker.entities.response.success.MonitoringReportListResponse; @@ -32,10 +31,8 @@ import ru.nbch.credit_tracker.utils.ZipUtils; import java.io.File; import java.io.IOException; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -102,15 +99,13 @@ public class SignalFacade { throw (SignalClientException) e; } log.error(e.getMessage(), e); - //todo throw new SignalServerException(e); - throw clientExcp(SignalError.ERROR_100, XmlErrorFormat.MonitoringError); + throw serverExcp(SignalError.ERROR_100, XmlErrorFormat.MonitoringError); } finally { if (zipInputStream != null) { try { zipInputStream.close(); } catch (IOException e) { - throw new RuntimeException(e); - //todo throw new SignalServerException(e); + throw serverExcp(SignalError.ERROR_100, XmlErrorFormat.MonitoringError); } } } @@ -118,7 +113,7 @@ public class SignalFacade { // валидация xml try { - validateMonitoringRequest(monitoringRequest); + ValidationUtil.validateMonitoringRequest(monitoringRequest); } catch (SignalClientException e) { signalService.rejectPackage(monitoringRequest); throw e; @@ -153,58 +148,6 @@ public class SignalFacade { return ResponseEntity.ok().body(new MonitoringResponse()); } - private void validateMonitoringRequest(MonitoringRequest request) throws SignalClientException { - if (request == null) { - throw clientExcp(SignalError.ERROR_011, XmlErrorFormat.MonitoringError); - } - - validateReruqredTags(request); - - validateTagsTypes(request); - } - - private void validateReruqredTags(MonitoringRequest request) throws SignalClientException { - if (request.getUserId() == null) { - throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "UserId"); - } - - if (request.getPackageName() == null) { - throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "PackageName"); - } - - if (request.getPassword() == null) { - throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Password"); - } - - if (request.getSubjects() == null) { - throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Subjects"); - } - - if (request.getSubjects().getSubject().isEmpty()) { - throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Subject"); - } - } - - private void validateTagsTypes(MonitoringRequest request) throws SignalClientException { - if (!ValidationUtil.validatePackageName(request.getPackageName())) { - throw clientExcp(SignalError.ERROR_008, XmlErrorFormat.MonitoringError, "Subject"); - } - - Set uniqueIds = new HashSet<>(); - for (Subject subject : request.getSubjects().getSubject()) { - if (!ValidationUtil.validatePhone(subject.getClientId())) { - throw clientExcp(SignalError.ERROR_003, XmlErrorFormat.MonitoringError); - } - if (!ValidationUtil.validateNPId(subject.getId())) { - throw clientExcp(SignalError.ERROR_010, XmlErrorFormat.MonitoringError); - } - // проверка на уникальность Id внутри одного пакета - if (!uniqueIds.add(subject.getId())) { - throw clientExcp(SignalError.ERROR_004, XmlErrorFormat.MonitoringError, subject.getId()); - } - } - } - private void registerFidsAndDebts(Integer packageId, String packageName) { executor.execute(() -> { try { diff --git a/src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java b/src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java index e37458a..3695db8 100644 --- a/src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java +++ b/src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java @@ -1,29 +1,82 @@ package ru.nbch.credit_tracker.utils; +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.enums.SignalError; +import ru.nbch.credit_tracker.enums.XmlErrorFormat; +import ru.nbch.credit_tracker.exceptions.SignalClientException; + +import java.util.HashSet; +import java.util.Set; import java.util.regex.Pattern; +import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp; + public class ValidationUtil { private static String phoneRegex = "^\\d{9}$"; private static String packageNameRegex = "^[A-Z0-9_]{1,22}$"; private static String npIdRegex = "^\\S{1,36}$"; + public static void validateMonitoringRequest(MonitoringRequest request) throws SignalClientException { + if (request == null) { + throw clientExcp(SignalError.ERROR_011, XmlErrorFormat.MonitoringError); + } - public static boolean validatePhone(String input) { + if (request.getUserId() == null) { + throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "UserId"); + } + + if (request.getPackageName() == null) { + throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "PackageName"); + } + + if (request.getPassword() == null) { + throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Password"); + } + + if (request.getSubjects() == null) { + throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Subjects"); + } + + if (request.getSubjects().getSubject().isEmpty()) { + throw clientExcp(SignalError.ERROR_002, XmlErrorFormat.MonitoringError, "Subject"); + } + + if (!validatePackageName(request.getPackageName())) { + throw clientExcp(SignalError.ERROR_008, XmlErrorFormat.MonitoringError, "Subject"); + } + + Set uniqueIds = new HashSet<>(); + for (Subject subject : request.getSubjects().getSubject()) { + if (!validatePhone(subject.getClientId())) { + throw clientExcp(SignalError.ERROR_003, XmlErrorFormat.MonitoringError); + } + if (!validateNPId(subject.getId())) { + throw clientExcp(SignalError.ERROR_010, XmlErrorFormat.MonitoringError); + } + // проверка на уникальность Id внутри одного пакета + if (!uniqueIds.add(subject.getId())) { + throw clientExcp(SignalError.ERROR_004, XmlErrorFormat.MonitoringError, subject.getId()); + } + } + } + + private static boolean validatePhone(String input) { if(input == null) { return false; } return Pattern.matches(phoneRegex, input); } - public static boolean validatePackageName(String input) { + private static boolean validatePackageName(String input) { if(input == null) { return false; } return Pattern.matches(packageNameRegex, input); } - public static boolean validateNPId(String input) { + private static boolean validateNPId(String input) { if(input == null) { return false; }