Skip to content

Commit b0a7c7a

Browse files
authored
Merge pull request #343 from Kernel360/fix/#340-알림-데이터-저장-에러-수정
fix: 예외 처리로 원래 트랜잭션에 영향 없도록 하기
2 parents 76e0055 + 3ef9679 commit b0a7c7a

3 files changed

Lines changed: 30 additions & 6 deletions

File tree

monicar-event-hub/src/main/java/org/eventhub/application/AlarmService.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,16 @@ public Optional<Alarm> findById(Long vehicleId) {
3030

3131
@Transactional(propagation = Propagation.REQUIRES_NEW)
3232
public Optional<Long> saveAlarmIfNecessary(Long vehicleId, Long totalDistance) {
33-
boolean isNecessary = findById(vehicleId)
34-
.map(alarm -> checkBiggerThanIntervalDistance(totalDistance, alarm.getDrivingDistance()))
35-
.orElse(true);
33+
try {
34+
boolean isNecessary = alarmRepository.findByVehicleIdAlarmRequired(vehicleId)
35+
.map(alarm -> checkBiggerThanIntervalDistance(totalDistance, alarm.getDrivingDistance()))
36+
.orElse(true);
3637

37-
if (isNecessary) {
38-
return Optional.ofNullable(alarmRepository.save(vehicleId));
38+
if (isNecessary) {
39+
return Optional.ofNullable(alarmRepository.save(vehicleId));
40+
}
41+
} catch (Exception e) {
42+
log.error("Alarm 쿼리 예외 발생", e);
3943
}
4044
return Optional.empty();
4145
}

monicar-event-hub/src/main/java/org/eventhub/application/port/AlarmRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@
66

77
public interface AlarmRepository {
88
Optional<Alarm> findByVehicleId(Long vehicleId);
9+
10+
Optional<Alarm> findByVehicleIdAlarmRequired(Long vehicleId);
911
Long save(Long vehicleId);
1012
}

monicar-event-hub/src/main/java/org/eventhub/infrastructure/repository/AlarmRepositoryAdapter.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,43 @@
22

33
import java.util.Optional;
44

5+
import com.querydsl.jpa.impl.JPAQueryFactory;
6+
57
import lombok.RequiredArgsConstructor;
68

79
import org.eventhub.application.port.AlarmRepository;
810
import org.eventhub.domain.Alarm;
911
import org.eventhub.domain.AlarmStatus;
1012
import org.eventhub.infrastructure.repository.jpa.AlarmJpaRepository;
1113
import org.eventhub.infrastructure.repository.jpa.entity.AlarmEntity;
14+
import org.eventhub.infrastructure.repository.jpa.entity.QAlarmEntity;
1215
import org.springframework.stereotype.Repository;
1316

1417
@RequiredArgsConstructor
1518
@Repository
1619
public class AlarmRepositoryAdapter implements AlarmRepository {
1720
private final AlarmJpaRepository alarmJpaRepository;
21+
private final JPAQueryFactory jpaQueryFactory;
1822

1923
@Override
20-
public Optional<Alarm> findByVehicleId(Long vehicleId) {
24+
public Optional<Alarm> findByVehicleId(Long vehicleId) {
2125
return alarmJpaRepository.findByVehicleId(vehicleId);
2226
}
2327

28+
@Override
29+
public Optional<Alarm> findByVehicleIdAlarmRequired(Long vehicleId) {
30+
QAlarmEntity alarmEntity = QAlarmEntity.alarmEntity;
31+
32+
Optional<AlarmEntity> alarm = Optional.ofNullable(jpaQueryFactory.select(alarmEntity)
33+
.from(alarmEntity)
34+
.where(alarmEntity.id.eq(vehicleId)
35+
.and(alarmEntity.status.eq(AlarmStatus.COMPLETED)))
36+
.orderBy(alarmEntity.createdAt.desc())
37+
.fetchFirst()
38+
);
39+
return alarm.map(AlarmEntity::toDomain);
40+
}
41+
2442
@Override
2543
public Long save(Long vehicleId) {
2644
Alarm newAlarm = Alarm.builder()

0 commit comments

Comments
 (0)