diff --git a/monicar-event-hub/src/main/java/org/eventhub/application/AlarmService.java b/monicar-event-hub/src/main/java/org/eventhub/application/AlarmService.java index ea8944e..9fab765 100644 --- a/monicar-event-hub/src/main/java/org/eventhub/application/AlarmService.java +++ b/monicar-event-hub/src/main/java/org/eventhub/application/AlarmService.java @@ -30,12 +30,16 @@ public Optional findById(Long vehicleId) { @Transactional(propagation = Propagation.REQUIRES_NEW) public Optional saveAlarmIfNecessary(Long vehicleId, Long totalDistance) { - boolean isNecessary = findById(vehicleId) - .map(alarm -> checkBiggerThanIntervalDistance(totalDistance, alarm.getDrivingDistance())) - .orElse(true); + try { + boolean isNecessary = alarmRepository.findByVehicleIdAlarmRequired(vehicleId) + .map(alarm -> checkBiggerThanIntervalDistance(totalDistance, alarm.getDrivingDistance())) + .orElse(true); - if (isNecessary) { - return Optional.ofNullable(alarmRepository.save(vehicleId)); + if (isNecessary) { + return Optional.ofNullable(alarmRepository.save(vehicleId)); + } + } catch (Exception e) { + log.error("Alarm 쿼리 예외 발생", e); } return Optional.empty(); } diff --git a/monicar-event-hub/src/main/java/org/eventhub/application/port/AlarmRepository.java b/monicar-event-hub/src/main/java/org/eventhub/application/port/AlarmRepository.java index 4c97ec9..16958f9 100644 --- a/monicar-event-hub/src/main/java/org/eventhub/application/port/AlarmRepository.java +++ b/monicar-event-hub/src/main/java/org/eventhub/application/port/AlarmRepository.java @@ -6,5 +6,7 @@ public interface AlarmRepository { Optional findByVehicleId(Long vehicleId); + + Optional findByVehicleIdAlarmRequired(Long vehicleId); Long save(Long vehicleId); } \ No newline at end of file diff --git a/monicar-event-hub/src/main/java/org/eventhub/infrastructure/repository/AlarmRepositoryAdapter.java b/monicar-event-hub/src/main/java/org/eventhub/infrastructure/repository/AlarmRepositoryAdapter.java index 44cc64b..53779a4 100644 --- a/monicar-event-hub/src/main/java/org/eventhub/infrastructure/repository/AlarmRepositoryAdapter.java +++ b/monicar-event-hub/src/main/java/org/eventhub/infrastructure/repository/AlarmRepositoryAdapter.java @@ -2,6 +2,8 @@ import java.util.Optional; +import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; import org.eventhub.application.port.AlarmRepository; @@ -9,18 +11,34 @@ import org.eventhub.domain.AlarmStatus; import org.eventhub.infrastructure.repository.jpa.AlarmJpaRepository; import org.eventhub.infrastructure.repository.jpa.entity.AlarmEntity; +import org.eventhub.infrastructure.repository.jpa.entity.QAlarmEntity; import org.springframework.stereotype.Repository; @RequiredArgsConstructor @Repository public class AlarmRepositoryAdapter implements AlarmRepository { private final AlarmJpaRepository alarmJpaRepository; + private final JPAQueryFactory jpaQueryFactory; @Override - public Optional findByVehicleId(Long vehicleId) { + public Optional findByVehicleId(Long vehicleId) { return alarmJpaRepository.findByVehicleId(vehicleId); } + @Override + public Optional findByVehicleIdAlarmRequired(Long vehicleId) { + QAlarmEntity alarmEntity = QAlarmEntity.alarmEntity; + + Optional alarm = Optional.ofNullable(jpaQueryFactory.select(alarmEntity) + .from(alarmEntity) + .where(alarmEntity.id.eq(vehicleId) + .and(alarmEntity.status.eq(AlarmStatus.COMPLETED))) + .orderBy(alarmEntity.createdAt.desc()) + .fetchFirst() + ); + return alarm.map(AlarmEntity::toDomain); + } + @Override public Long save(Long vehicleId) { Alarm newAlarm = Alarm.builder()