From 7d485f407960cd325bcea10b9c9b20194269c7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernhard=20M=C3=BCller?= Date: Wed, 24 Jun 2026 09:33:35 +0200 Subject: [PATCH] error handling for existing meteringpoints --- .../common/event/InitiateMakoConsentEvent.java | 4 +++- .../exception/AtNumberAlreadyExistsException.java | 7 +++++++ .../common/exception/GlobalExceptionHandler.java | 7 +++++++ .../event/listener/CommunityMakoListener.java | 2 ++ .../event/listener/MeteringPointEventListener.java | 13 +++++++++---- .../repository/MeteringPointRepository.java | 2 ++ 6 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/AtNumberAlreadyExistsException.java diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/common/event/InitiateMakoConsentEvent.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/common/event/InitiateMakoConsentEvent.java index 621d433..6f11919 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/common/event/InitiateMakoConsentEvent.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/common/event/InitiateMakoConsentEvent.java @@ -1,3 +1,5 @@ package at.mueller.eeg.backend.common.event; -public record InitiateMakoConsentEvent(String atNumber, String pointType) {} +import java.util.UUID; + +public record InitiateMakoConsentEvent(UUID userId, UUID meteringPointId, String atNumber, String pointType) {} \ No newline at end of file diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/AtNumberAlreadyExistsException.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/AtNumberAlreadyExistsException.java new file mode 100644 index 0000000..d6b19cb --- /dev/null +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/AtNumberAlreadyExistsException.java @@ -0,0 +1,7 @@ +package at.mueller.eeg.backend.common.exception; + +public class AtNumberAlreadyExistsException extends RuntimeException{ + public AtNumberAlreadyExistsException(String message) { + super(message); + } +} diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/GlobalExceptionHandler.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/GlobalExceptionHandler.java index d486e1b..1105ad5 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/GlobalExceptionHandler.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/common/exception/GlobalExceptionHandler.java @@ -30,4 +30,11 @@ public class GlobalExceptionHandler { .status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Ein unerwarteter Fehler ist aufgetreten: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value())); } + + @ExceptionHandler(AtNumberAlreadyExistsException.class) + public ResponseEntity handleAtNumberAlreadyExists(AtNumberAlreadyExistsException ex) { + return ResponseEntity + .status(HttpStatus.CONFLICT) + .body(new ErrorResponse("Zählerpunkt existiert bereits", HttpStatus.CONFLICT.value())); + } } \ No newline at end of file diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/CommunityMakoListener.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/CommunityMakoListener.java index 4582af4..593bb94 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/CommunityMakoListener.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/CommunityMakoListener.java @@ -46,6 +46,8 @@ public class CommunityMakoListener { log.info("Delegiere Consent-Request für {} an MaKo-Domain via Event.", mp.getAtNumber()); eventPublisher.publishEvent(new InitiateMakoConsentEvent( + mp.getUserId(), + mp.getId(), mp.getAtNumber(), mp.getType().name() )); diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java index 688fe7a..1244fa5 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java @@ -1,9 +1,10 @@ package at.mueller.eeg.backend.community.event.listener; -import at.mueller.eeg.backend.common.event.EdaTopologyCheckEvent; import at.mueller.eeg.backend.common.event.EdaTopologyCompletedEvent; import at.mueller.eeg.backend.common.event.EdaTopologyFailedEvent; +import at.mueller.eeg.backend.common.event.InitiateMakoConsentEvent; import at.mueller.eeg.backend.common.event.UserRegisteredEvent; +import at.mueller.eeg.backend.common.exception.AtNumberAlreadyExistsException; import at.mueller.eeg.backend.community.domain.MeteringPoint; import at.mueller.eeg.backend.community.domain.PointType; import at.mueller.eeg.backend.community.domain.state.MakoTrigger; @@ -26,16 +27,20 @@ public class MeteringPointEventListener { private final MeteringPointRepository meteringPointRepository; private final ApplicationEventPublisher eventPublisher; - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - @Transactional(propagation = Propagation.REQUIRES_NEW) + @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT) + @Transactional(propagation = Propagation.REQUIRED) public void handleUserRegistered(UserRegisteredEvent event) { + if (meteringPointRepository.existsByAtNumber(event.atNumber())) { + throw new AtNumberAlreadyExistsException(event.atNumber()); + } MeteringPoint point = new MeteringPoint(); point.setUserId(event.userId()); point.setAtNumber(event.atNumber()); + //TODO: PointType muss auswählbar sein point.setType(PointType.CONSUMER); meteringPointRepository.save(point); - eventPublisher.publishEvent(new EdaTopologyCheckEvent(event.userId(), point.getId(), event.atNumber())); + eventPublisher.publishEvent(new InitiateMakoConsentEvent(event.userId(), point.getId(), event.atNumber(), point.getType().name())); } @EventListener diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/repository/MeteringPointRepository.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/repository/MeteringPointRepository.java index 1f4569e..c97c9e3 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/repository/MeteringPointRepository.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/repository/MeteringPointRepository.java @@ -9,4 +9,6 @@ import java.util.UUID; public interface MeteringPointRepository extends JpaRepository { List findAllByUserId(UUID userId); + + boolean existsByAtNumber(String atNumber); }