Skip to content
Snippets Groups Projects
Commit a81400d3 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-6949-refactoring' (#101) from OZG-6949-refactoring into master

parents 98a01067 b2a3547f
No related branches found
No related tags found
No related merge requests found
Showing
with 141 additions and 211 deletions
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten
* des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung.
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
......@@ -23,9 +23,11 @@
package de.ozgcloud.antragsraum.common;
public class AddressNotFoundException extends RuntimeException {
private static final String MESSAGE_TEMPLATE = "No NachrichtEvent for id '%s' found";
public AddressNotFoundException(String replyToId) {
super(String.format(MESSAGE_TEMPLATE, replyToId));
}
}
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.antragsraum.common;
import jakarta.annotation.Priority;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
@Log4j2
@Priority(value = 0)
public class AttachmentNotFoundAdvice extends ResponseEntityExceptionHandler {
@ResponseBody
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String handleNotFound(NotFoundException ex) {
LOG.error("Error loading attachment.", ex);
return "Attachment not found";
}
}
/*
* Copyright (c) 2023-2024.
* Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten
* des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung.
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
......@@ -20,25 +22,56 @@
package de.ozgcloud.antragsraum.common;
import jakarta.annotation.Priority;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import lombok.extern.log4j.Log4j2;
@ControllerAdvice
@Log4j2
@Priority(value = 0)
public class InvalidFileAdvice extends ResponseEntityExceptionHandler {
@ControllerAdvice
public class ExceptionController extends ResponseEntityExceptionHandler {
@ResponseBody
@ExceptionHandler(AddressNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String handleAddressNotFoundException(AddressNotFoundException ex) {
LOG.error("Error getting address of target OZG-Cloud instance. Message: {}", ex.getMessage(), ex);
return "Target address not found";
}
@ResponseBody
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String handleNotFoundException(NotFoundException ex) {
LOG.error("Error loading attachment.", ex);
return "Attachment not found";
}
@ExceptionHandler(value = { RuntimeException.class, TechnicalException.class })
@ResponseBody
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
String handleGeneralException(RuntimeException ex) {
LOG.error("General error.", ex);
return "General error processing your request.";
}
@ExceptionHandler(value = { InvalidFileTypeException.class })
protected ResponseEntity<Object> handleInvalidFile(RuntimeException ex, WebRequest request) {
ResponseEntity<Object> handleInvalidFileTypeException(RuntimeException ex, WebRequest request) {
LOG.error("Uploaded file is not valid.", ex);
return handleExceptionInternal(ex, "File not acceptable", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request);
}
@ExceptionHandler(value = { VirusFoundException.class })
ResponseEntity<Object> handleVirusFoundException(RuntimeException ex, WebRequest request) {
LOG.error("Virus found in uploaded file.", ex);
return handleExceptionInternal(ex, "Virus found", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request);
}
}
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.antragsraum.common;
import jakarta.annotation.Priority;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
@Log4j2
@Priority(value = 9)
public class GeneralExceptionAdvice extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {RuntimeException.class, TechnicalException.class})
@ResponseBody
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
String handleException(RuntimeException ex) {
LOG.error("General error.", ex);
return "General error processing your request.";
}
}
/*
* Copyright (c) 2023-2024.
* Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten
* des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung.
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
......@@ -21,9 +23,11 @@
package de.ozgcloud.antragsraum.common;
public class InvalidFileTypeException extends RuntimeException {
private static final String MESSAGE_TEMPLATE = "File '%s' has an unsupported file type";
public InvalidFileTypeException(String fileName) {
super(String.format(MESSAGE_TEMPLATE, fileName));
}
}
......@@ -23,9 +23,11 @@
package de.ozgcloud.antragsraum.common;
public class NotAccessibleException extends RuntimeException {
private static final String MESSAGE_TEMPLATE = "Current user does not have the required trust level for the Rueckfrage with id '%s'.";
public NotAccessibleException(String rueckfrageId) {
super(String.format(MESSAGE_TEMPLATE, rueckfrageId));
}
}
\ No newline at end of file
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten
* des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung.
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
......@@ -23,9 +23,11 @@
package de.ozgcloud.antragsraum.common;
public class NotFoundException extends RuntimeException {
private static final String MESSAGE_TEMPLATE = "Object '%s' with id '%s' not found.";
public NotFoundException(Class<?> resource, String id) {
super(String.format(MESSAGE_TEMPLATE, resource.getSimpleName(), id));
}
}
......@@ -27,9 +27,11 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class RestClientUtils {
public static String sanitizeAddress(String address) {
address = address.replaceAll(":\\d{4}$", "");
address = address.replaceAll("^static://", "");
return address;
}
}
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.antragsraum.common;
import jakarta.annotation.Priority;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
@Log4j2
@Priority(value = 0)
public class SendTimeoutAdvice extends ResponseEntityExceptionHandler {
@ResponseBody
@ExceptionHandler(SendTimeoutException.class)
@ResponseStatus(HttpStatus.GATEWAY_TIMEOUT)
String sendTimeoutHandler(SendTimeoutException ex) {
LOG.error("Timeout while sending answer. Message: " + ex.getMessage(), ex);
return "Timeout while sending answer";
}
}
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten
* des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung.
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
......@@ -23,9 +23,11 @@
package de.ozgcloud.antragsraum.common;
public class TechnicalException extends RuntimeException {
private static final String MESSAGE_TEMPLATE = "TechnicalException happened! Message: ";
public TechnicalException(Throwable ex) {
super(MESSAGE_TEMPLATE + ex.getMessage(), ex);
}
}
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.antragsraum.common;
import jakarta.annotation.Priority;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
@Log4j2
@Priority(value = 0)
public class VirusFoundAdvice extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {VirusFoundException.class})
protected ResponseEntity<Object> handleVirusFound(RuntimeException ex, WebRequest request) {
LOG.error("Virus found in uploaded file.", ex);
return handleExceptionInternal(ex, "Virus found", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request);
}
}
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten
* des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung.
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
......@@ -23,9 +23,11 @@
package de.ozgcloud.antragsraum.common;
public class VirusFoundException extends RuntimeException {
private static final String MESSAGE_TEMPLATE = "File with nachrichtId '%s' contains virus.";
public VirusFoundException(String id) {
super(String.format(MESSAGE_TEMPLATE, id));
}
}
/*
* Copyright (c) 2023-2024.
* Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten
* des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung.
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
......@@ -23,9 +23,11 @@
package de.ozgcloud.antragsraum.common;
public class VirusScanException extends RuntimeException {
private static final String MESSAGE_TEMPLATE = "Virus scan for file with name '%s' failed.";
public VirusScanException(String fileName) {
super(String.format(MESSAGE_TEMPLATE, fileName));
}
}
......@@ -31,4 +31,5 @@ public class RepositoryAspectPointcut {
void anyPublicRepositoryMethod() {
// aspect pointcut - no implementation needed
}
}
......@@ -36,4 +36,5 @@ public class RepositoryLoggingAspect extends RepositoryAspectPointcut {
public void onRepositoryMethod(JoinPoint joinPoint) {
AspectLoggingUtils.log(joinPoint);
}
}
\ No newline at end of file
......@@ -25,5 +25,10 @@ package de.ozgcloud.antragsraum.events;
import lombok.Builder;
@Builder
public record NachrichtEvent(String id, String postfachId, String address) {
public record NachrichtEvent(
String id,
String postfachId,
String address
) {
}
......@@ -32,4 +32,5 @@ interface NachrichtEventMapper {
@Mapping(target = "address", source = "ozgCloudAddress")
NachrichtEvent fromRest(InfoGrpcInformationNachricht nachricht);
}
\ No newline at end of file
......@@ -30,6 +30,7 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Service
class NachrichtEventRemoteService {
private final NachrichtEventRestClient restClient;
private final NachrichtEventMapper mapper;
......@@ -48,4 +49,5 @@ class NachrichtEventRemoteService {
return response.getNachrichten().stream().map(mapper::fromRest).toList();
}
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ import de.ozgcloud.common.errorhandling.TechnicalException;
@Component
class NachrichtEventRestClient {
static final String INFORMATION_LIST_ENDPOINT = "api/v1/informations/{postfachId}";
static final String INFORMATION_ENDPOINT = "api/v1/information/{id}";
......@@ -39,4 +40,5 @@ class NachrichtEventRestClient {
throw new TechnicalException("Error retrieving data from grpc using restclient.", e);
}
}
}
\ No newline at end of file
......@@ -32,6 +32,7 @@ import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class NachrichtEventService {
private final @NonNull NachrichtEventRemoteService remoteService;
public NachrichtEvent getNachrichtEventById(String id) {
......@@ -41,4 +42,5 @@ public class NachrichtEventService {
public List<NachrichtEvent> getNachrichtEventsOfPostfachId(String postfachId) {
return remoteService.getNachrichtEventsByPostfach(postfachId);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment