Added getting list of packages

This commit is contained in:
Mikhail Trofimov 2025-06-24 15:01:11 +03:00
parent c48f2dbf55
commit 4a9c59b0e3
5 changed files with 124 additions and 1 deletions

View file

@ -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<MonitoringReportListResponse> getReportList(@RequestParam("username") String username, @RequestParam("packageName") String packageName) {
return signalFacade.getReportList(username, packageName);
}
}

View file

@ -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;
}

View file

@ -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<String> reports;
public List<String> getReports() {
if (reports == null) {
reports = new ArrayList<>();
}
return this.reports;
}
}
}

View file

@ -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", "Нет активного пакета с именем "),

View file

@ -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<MonitoringReportListResponse> 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);
}
}
}