error handling for existing meteringpoints

This commit is contained in:
Bernhard Müller 2026-06-24 09:33:35 +02:00
parent 8b57f97d88
commit 7d485f4079
6 changed files with 30 additions and 5 deletions

View File

@ -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) {}

View File

@ -0,0 +1,7 @@
package at.mueller.eeg.backend.common.exception;
public class AtNumberAlreadyExistsException extends RuntimeException{
public AtNumberAlreadyExistsException(String message) {
super(message);
}
}

View File

@ -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<ErrorResponse> handleAtNumberAlreadyExists(AtNumberAlreadyExistsException ex) {
return ResponseEntity
.status(HttpStatus.CONFLICT)
.body(new ErrorResponse("Zählerpunkt existiert bereits", HttpStatus.CONFLICT.value()));
}
}

View File

@ -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()
));

View File

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

View File

@ -9,4 +9,6 @@ import java.util.UUID;
public interface MeteringPointRepository extends JpaRepository<MeteringPoint, UUID> {
List<MeteringPoint> findAllByUserId(UUID userId);
boolean existsByAtNumber(String atNumber);
}