find packages method; global exceptions
This commit is contained in:
parent
e7d5ff82f4
commit
999ac42f48
4 changed files with 136 additions and 27 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package ru.nbch.credit_tracker.config.rest;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
|
@ -9,15 +10,19 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
|
|||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
import org.springframework.web.multipart.MaxUploadSizeExceededException;
|
||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.*;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.CommonError;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.MonitoringActivePackagesError;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.MonitoringAllPackagesError;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.MonitoringDownloadError;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.MonitoringError;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.MonitoringPackageDeleteError;
|
||||
import ru.nbch.credit_tracker.entities.user_response.errors.MonitoringReportListError;
|
||||
import ru.nbch.credit_tracker.enums.SignalError;
|
||||
import ru.nbch.credit_tracker.exceptions.SignalClientException;
|
||||
import ru.nbch.credit_tracker.exceptions.SignalException;
|
||||
import ru.nbch.credit_tracker.exceptions.SignalServerException;
|
||||
import ru.nbch.credit_tracker.utils.error.SimpleMessageResolver;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
@Slf4j
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
|
@ -42,34 +47,33 @@ public class GlobalExceptionHandler {
|
|||
return new ResponseEntity<>(error, headers, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = SignalException.class, produces = MediaType.APPLICATION_XML_VALUE)
|
||||
public ResponseEntity<CommonError> handleClientException(SignalException ex) {
|
||||
@ExceptionHandler(value = SignalClientException.class, produces = MediaType.APPLICATION_XML_VALUE)
|
||||
public ResponseEntity<CommonError> handleClientException(SignalClientException ex) {
|
||||
CommonError err = getCommonError(ex);
|
||||
String packageName = ex.getPackageName();
|
||||
if(packageName != null ) {
|
||||
log.warn("Response error: {}. PackageName: {}", err.getErrorText(), packageName);
|
||||
} else {
|
||||
log.warn("Response error: {}", err.getErrorText());
|
||||
}
|
||||
return new ResponseEntity<>(err, xmlHeaders(), HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = SignalServerException.class, produces = MediaType.APPLICATION_XML_VALUE)
|
||||
public ResponseEntity<CommonError> handleServerException(SignalServerException ex) {
|
||||
CommonError commonError = getCommonError(ex);
|
||||
Exception cause = ex.getCause();
|
||||
log.error(cause.getMessage(), cause);
|
||||
return new ResponseEntity<>(commonError, xmlHeaders(), HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
private HttpHeaders xmlHeaders() {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(new MediaType("application", "xml", Charset.forName(encoding)));
|
||||
|
||||
String errorText = messageResolver.resolve(ex.getErrorMessage());
|
||||
|
||||
CommonError commonError = getCommonError(ex);
|
||||
commonError.setStatus("error");
|
||||
commonError.setErrorCode(ex.getErrorMessage().getSubject().getCode());
|
||||
commonError.setErrorText(errorText);
|
||||
|
||||
if (ex instanceof SignalClientException) {
|
||||
String packageName = ((SignalClientException) ex).getPackageName();
|
||||
if(packageName != null ) {
|
||||
log.warn("Response error: {}. PackageName: {}", errorText, packageName);
|
||||
} else {
|
||||
log.warn("Response error: {}", errorText);
|
||||
}
|
||||
return new ResponseEntity<>(commonError, headers, HttpStatus.BAD_REQUEST);
|
||||
} else {
|
||||
Exception cause = ((SignalServerException) ex).getCause();
|
||||
log.error(cause.getMessage(), cause);
|
||||
return new ResponseEntity<>(commonError, headers, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
private static CommonError getCommonError(SignalException ex) {
|
||||
private CommonError getCommonError(SignalException ex) {
|
||||
CommonError commonError;
|
||||
switch (ex.getErrorFormat()) {
|
||||
case MonitoringError -> commonError = new MonitoringError();
|
||||
|
|
@ -80,6 +84,10 @@ public class GlobalExceptionHandler {
|
|||
case MonitoringPackageDeleteError -> commonError = new MonitoringPackageDeleteError();
|
||||
default -> throw new IllegalStateException("Unsupported error format: " + ex.getErrorFormat());
|
||||
}
|
||||
commonError.setStatus("error");
|
||||
commonError.setErrorCode(ex.getErrorMessage().getSubject().getCode());
|
||||
String errorText = messageResolver.resolve(ex.getErrorMessage());
|
||||
commonError.setErrorText(errorText);
|
||||
return commonError;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,21 @@ package ru.nbch.credit_tracker.controller;
|
|||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import ru.nbch.credit_tracker.entities.user_request.active_packages.MonitoringActivePackagesRequest;
|
||||
import ru.nbch.credit_tracker.entities.user_request.all_packages.MonitoringAllPackagesRequest;
|
||||
import ru.nbch.credit_tracker.entities.user_response.active_packages.MonitoringActivePackagesResponse;
|
||||
import ru.nbch.credit_tracker.entities.user_response.all_packages.MonitoringAllPackagesResponse;
|
||||
import ru.nbch.credit_tracker.entities.user_response.success.MonitoringSetupResponse;
|
||||
import ru.nbch.credit_tracker.enums.SignalError;
|
||||
import ru.nbch.credit_tracker.enums.XmlErrorFormat;
|
||||
import ru.nbch.credit_tracker.exceptions.SignalException;
|
||||
import ru.nbch.credit_tracker.facade.SignalFacadeV2;
|
||||
import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.serverExcp;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v2/signal")
|
||||
|
|
@ -26,5 +35,31 @@ public class SignalControllerV2 {
|
|||
return ResponseEntity.ok().body(new MonitoringSetupResponse());
|
||||
}
|
||||
|
||||
@PostMapping(value = "/active_packages", consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE)
|
||||
public ResponseEntity<MonitoringActivePackagesResponse> findActivePackages(@RequestBody MonitoringActivePackagesRequest activePackagesRequest) {
|
||||
try {
|
||||
return signalFacadeV2.findActivePackages(activePackagesRequest);
|
||||
} catch (Exception e) {
|
||||
throwOrWrap(SignalError.ERROR_013, XmlErrorFormat.MonitoringActivePackagesError, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping(value = "/all_packages", consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE)
|
||||
public ResponseEntity<MonitoringAllPackagesResponse> findAllPackages(@RequestBody MonitoringAllPackagesRequest allPackagesRequest) {
|
||||
try {
|
||||
return signalFacadeV2.findAllPackages(allPackagesRequest);
|
||||
} catch (Exception e) {
|
||||
throwOrWrap(SignalError.ERROR_013, XmlErrorFormat.MonitoringAllPackagesError, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static void throwOrWrap(SignalError error, XmlErrorFormat specific, Exception ex) {
|
||||
if (ex instanceof SignalException) {
|
||||
throw (SignalException) ex;
|
||||
}
|
||||
throw serverExcp(error, specific, ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,4 +4,5 @@ public interface CommonError {
|
|||
void setStatus(String status);
|
||||
void setErrorCode(String errorCode);
|
||||
void setErrorText(String errorText);
|
||||
String getErrorText();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,13 +2,24 @@ package ru.nbch.credit_tracker.facade;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import ru.nbch.credit_tracker.component.MonitoringRequestValidator;
|
||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||
import ru.nbch.credit_tracker.entities.dto.UserPackage;
|
||||
import ru.nbch.credit_tracker.entities.user_request.active_packages.MonitoringActivePackagesRequest;
|
||||
import ru.nbch.credit_tracker.entities.user_request.all_packages.MonitoringAllPackagesRequest;
|
||||
import ru.nbch.credit_tracker.entities.user_response.active_packages.MonitoringActivePackagesResponse;
|
||||
import ru.nbch.credit_tracker.entities.user_response.active_packages.Package;
|
||||
import ru.nbch.credit_tracker.entities.user_response.active_packages.Packages;
|
||||
import ru.nbch.credit_tracker.entities.user_response.all_packages.MonitoringAllPackagesResponse;
|
||||
import ru.nbch.credit_tracker.entities.user_response.all_packages.PackageAll;
|
||||
import ru.nbch.credit_tracker.entities.user_response.all_packages.PackagesAll;
|
||||
import ru.nbch.credit_tracker.enums.SignalError;
|
||||
import ru.nbch.credit_tracker.enums.Status;
|
||||
import ru.nbch.credit_tracker.enums.XmlErrorFormat;
|
||||
|
|
@ -100,4 +111,58 @@ public class SignalFacadeV2 {
|
|||
throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringError, e);
|
||||
}
|
||||
}
|
||||
|
||||
public ResponseEntity<MonitoringActivePackagesResponse> findActivePackages(MonitoringActivePackagesRequest activePackagesRequest) throws Exception {
|
||||
AuthorizationService.AuthResult authResult = authorizationService.findAuthInfo(activePackagesRequest.getUserId(), activePackagesRequest.getPassword());
|
||||
if (!authResult.isSuccess()) {
|
||||
throw clientExcp(authResult.getError(), XmlErrorFormat.MonitoringActivePackagesError);
|
||||
}
|
||||
|
||||
List<UserPackage> activePackages = signalService.findActivePackages(activePackagesRequest.getUserId());
|
||||
if (activePackages.isEmpty()) {
|
||||
throw clientExcp(SignalError.ERROR_015, XmlErrorFormat.MonitoringActivePackagesError);
|
||||
}
|
||||
|
||||
MonitoringActivePackagesResponse response = new MonitoringActivePackagesResponse();
|
||||
response.setStatus("OK");
|
||||
response.setMembercode(activePackagesRequest.getUserId().substring(0, 6));
|
||||
Packages packages = new Packages();
|
||||
activePackages.forEach(data -> {
|
||||
Package pack = new Package();
|
||||
pack.setPackageName(data.getPackageName());
|
||||
pack.setCreatedAt(data.getCreatedAt() != null ? data.getCreatedAt().toString() : null);
|
||||
packages.getPackages().add(pack);
|
||||
});
|
||||
response.setPackages(packages);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
public ResponseEntity<MonitoringAllPackagesResponse> findAllPackages(MonitoringAllPackagesRequest allPackagesRequest) throws Exception {
|
||||
AuthorizationService.AuthResult authResult = authorizationService.findAuthInfo(allPackagesRequest.getUserId(), allPackagesRequest.getPassword());
|
||||
if (!authResult.isSuccess()) {
|
||||
throw clientExcp(authResult.getError(), XmlErrorFormat.MonitoringAllPackagesError);
|
||||
}
|
||||
|
||||
List<UserPackage> activePackages = signalService.findAllPackages(allPackagesRequest.getUserId());
|
||||
if (activePackages.isEmpty()) {
|
||||
throw clientExcp(SignalError.ERROR_019, XmlErrorFormat.MonitoringAllPackagesError);
|
||||
}
|
||||
|
||||
MonitoringAllPackagesResponse response = new MonitoringAllPackagesResponse();
|
||||
response.setStatus("OK");
|
||||
response.setMembercode(allPackagesRequest.getUserId().substring(0, 6));
|
||||
PackagesAll packages = new PackagesAll();
|
||||
activePackages.forEach(data -> {
|
||||
PackageAll pack = new PackageAll();
|
||||
pack.setPackageName(data.getPackageName());
|
||||
pack.setCreatedAt(data.getCreatedAt() != null ? data.getCreatedAt().toString() : null);
|
||||
pack.setStatus(data.getStatus());
|
||||
if (data.getStatus().equals(Status.DELETED.name())) {
|
||||
pack.setDeactivatedAt(data.getDeactivatedAt() != null ? data.getDeactivatedAt().toString() : null);
|
||||
}
|
||||
packages.getPackages().add(pack);
|
||||
});
|
||||
response.setPackages(packages);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue