diff --git a/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java b/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java index 77853a2..bedd8a7 100644 --- a/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java +++ b/src/main/java/ru/nbch/credit_tracker/controller/SignalController.java @@ -8,6 +8,7 @@ import org.springframework.web.multipart.MultipartFile; import ru.nbch.credit_tracker.entities.request.active_packages.MonitoringActivePackagesRequest; 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.facade.SignalFacade; @RestController @@ -35,5 +36,10 @@ public class SignalController { return signalFacade.deletePackage(username, packageName); } + @GetMapping(value = "/report_list", params = {"username", "packageName"}, produces = MediaType.APPLICATION_XML_VALUE) + public ResponseEntity getReportList(@RequestParam("username") String username, @RequestParam("packageName") String packageName) { + return signalFacade.getReportList(username, packageName); + } + } diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/errors/MonitoringReportListError.java b/src/main/java/ru/nbch/credit_tracker/entities/response/errors/MonitoringReportListError.java new file mode 100644 index 0000000..07525d2 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/errors/MonitoringReportListError.java @@ -0,0 +1,25 @@ +package ru.nbch.credit_tracker.entities.response.errors; + +import jakarta.xml.bind.annotation.*; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MonitoringReportListResponse", propOrder = { + "status", + "errorCode", + "errorText" +}) +@XmlRootElement(name = "MonitoringReportListResponse") +public class MonitoringReportListError implements CommonError { + + @XmlElement(name = "Status", required = true) + protected String status; + @XmlElement(name = "ErrorCode",required = true) + protected String errorCode; + @XmlElement(name = "ErrorText",required = true) + protected String errorText; + +} diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/success/MonitoringReportListResponse.java b/src/main/java/ru/nbch/credit_tracker/entities/response/success/MonitoringReportListResponse.java new file mode 100644 index 0000000..831181a --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/success/MonitoringReportListResponse.java @@ -0,0 +1,45 @@ +package ru.nbch.credit_tracker.entities.response.success; + +import jakarta.xml.bind.annotation.*; +import lombok.Getter; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MonitoringPackageDeleteResponse", propOrder = { + "packageName", + "reports" +}) +@XmlRootElement(name = "MonitoringReportListResponse") +public class MonitoringReportListResponse { + + @XmlElement(name = "PackageName", required = true) + protected String packageName; + + @XmlElement(name = "Reports", required = true) + protected Reports reports; + + + + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "reports" + }) + public static class Reports { + + @XmlElement(name = "Report", required = true) + protected List reports; + + public List getReports() { + if (reports == null) { + reports = new ArrayList<>(); + } + return this.reports; + } + } + +} diff --git a/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java b/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java index 170e0ba..676c674 100644 --- a/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java +++ b/src/main/java/ru/nbch/credit_tracker/enums/SignalError.java @@ -15,7 +15,7 @@ public enum SignalError { ERROR_009("009", "Превышен допустимый размер пакета"), ERROR_010("010", "Идентификатор субъекта (Id) не соответствует допустимому формату"), ERROR_011("011", "Получен невалидный XML"), - + ERROR_012("012", "Пакет не найден"), ERROR_013("013", "На стороне сервиса произошла ошибка, попробуйте повторить запрос позже или сообщите в техническую поддержку"), ERROR_015("015", "Клиент с указанным membercode не найден"), ERROR_016("016", "Нет активного пакета с именем "), 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 0d53317..7aa30aa 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -13,7 +13,9 @@ 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.MonitoringPackageDeleteError; +import ru.nbch.credit_tracker.entities.response.errors.MonitoringReportListError; 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.entities.signal_package.Signals; import ru.nbch.credit_tracker.enums.SignalError; @@ -29,6 +31,7 @@ import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.jaxb.XmlUtilService; import ru.nbch.credit_tracker.utils.ValidationUtil; +import java.io.File; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -300,4 +303,48 @@ public class SignalFacade { throw new SignalErrorException(SignalError.ERROR_017, null, new MonitoringPackageDeleteError(), false); } } + + public ResponseEntity getReportList(String username, String packageName) { + try { + if (!signalService.isPackageExists(username, packageName)) { + throw new SignalErrorException(SignalError.ERROR_016, packageName, new MonitoringReportListError(), true); + } + + String memberCode = username.substring(0, 6); + String filePrefix = (memberCode + "_" + packageName).toUpperCase(); + String dirPath = config.getLoadDir() + File.separator + memberCode; + File folder = new File(dirPath); + + if (folder.exists() && folder.isDirectory()) { + MonitoringReportListResponse.Reports reports = new MonitoringReportListResponse.Reports(); + File[] files = folder.listFiles(); + if (files == null) { + throw new SignalErrorException(SignalError.ERROR_012, packageName, new MonitoringReportListError(), true); + } + for (File file : files) { + if (file.isFile() && file.getName().startsWith(filePrefix)) { + reports.getReports().add(file.getName()); + } + } + + if (reports.getReports().isEmpty()) { + throw new SignalErrorException(SignalError.ERROR_012, packageName, new MonitoringReportListError(), true); + } else { + MonitoringReportListResponse response = new MonitoringReportListResponse(); + response.setPackageName(packageName); + response.setReports(reports); + return ResponseEntity.ok(response); + } + } else { + log.error("Пакет {} был найден в бд для memberCode {}, но ни одного архива не было найдено в папке {}", packageName, username, dirPath); + throw new SignalErrorException(SignalError.ERROR_013, packageName, new MonitoringReportListError(), true); + } + } catch (Exception e) { + if (e instanceof SignalErrorException) { + throw (SignalErrorException) e; + } + log.error(e.getMessage(), e); + throw new SignalErrorException(SignalError.ERROR_013, null, new MonitoringReportListError(), false); + } + } }