From a309935ea8640e9dccd386748ec8221d511941f7 Mon Sep 17 00:00:00 2001 From: yeobi Date: Mon, 30 Dec 2024 11:49:08 +0900 Subject: [PATCH] =?UTF-8?q?[Fix]=20Dutch=20database=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dutch/repository/DutchRepository.java | 3 +- .../domain/dutch/service/DutchService.java | 40 +++++++++---------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/Dodutch_Server/domain/dutch/repository/DutchRepository.java b/src/main/java/com/Dodutch_Server/domain/dutch/repository/DutchRepository.java index 664e1f2..0abb80c 100644 --- a/src/main/java/com/Dodutch_Server/domain/dutch/repository/DutchRepository.java +++ b/src/main/java/com/Dodutch_Server/domain/dutch/repository/DutchRepository.java @@ -10,7 +10,8 @@ public interface DutchRepository extends JpaRepository { List findByTripId(Long tripId); Optional findByTripIdAndId(Long tripId, Long id); - boolean existsByTripIdAndPayerIdAndPayeeIdAndPerCost(Long tripId, Long payerId, Long payeeId, Integer perCost); + boolean existsByTripIdAndPayerIdAndPayeeId(Long tripId, Long payerId, Long payeeId); List findByPayerIdOrPayeeId(Long payerId, Long payeeId); List findByPayerIdOrPayeeIdOrderByCreatedAtDesc(Long payerId, Long payeeId); + void deleteByTripId(Long tripId); } diff --git a/src/main/java/com/Dodutch_Server/domain/dutch/service/DutchService.java b/src/main/java/com/Dodutch_Server/domain/dutch/service/DutchService.java index e5397d8..61fb7f7 100644 --- a/src/main/java/com/Dodutch_Server/domain/dutch/service/DutchService.java +++ b/src/main/java/com/Dodutch_Server/domain/dutch/service/DutchService.java @@ -13,6 +13,7 @@ import com.Dodutch_Server.domain.trip.entity.TripMember; import com.Dodutch_Server.domain.trip.repository.TripMemberRepository; import com.Dodutch_Server.domain.trip.repository.TripRepository; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -126,8 +127,11 @@ public List calculateSettlement(Long tripId) { return dutchDTOs; } - + @Transactional public void saveSettlementToDatabase(Long tripId, List dutchDTOs) { + // 여행 프로젝트의 기존 정산 내역 삭제 + dutchRepository.deleteByTripId(tripId); + Trip trip = tripRepository.findById(tripId) .orElseThrow(() -> new IllegalArgumentException("TripId not found")); @@ -137,26 +141,20 @@ public void saveSettlementToDatabase(Long tripId, List dutchDTOs) { Member payee = memberRepository.findById(dutchDTO.getPayee()) .orElseThrow(() -> new IllegalArgumentException("Payee not found")); - // 중복된 Dutch 데이터가 존재하는지 확인하기 - boolean isExistingDutch = dutchRepository.existsByTripIdAndPayerIdAndPayeeIdAndPerCost( - tripId, payer.getId(), payee.getId(), dutchDTO.getAmountToPay() - ); - - // 중복이 없을 때만 새로 저장하기 - if (!isExistingDutch) { - TripMember tripMember = tripMemberRepository.findByTripIdAndMemberId(trip.getId(), payer.getId()) - .orElseThrow(() -> new IllegalArgumentException("TripMember not found for payer")); - - // Dutch Entity 생성 및 저장 - Dutch dutch = new Dutch(); - dutch.setTrip(trip); - dutch.setTripMember(tripMember); - dutch.setPayer(payer); - dutch.setPayee(payee); - dutch.setPerCost(dutchDTO.getAmountToPay()); - dutch.setIsCompleted(false); - dutchRepository.save(dutch); - } + // TripMember 확인 + TripMember tripMember = tripMemberRepository.findByTripIdAndMemberId(trip.getId(), payer.getId()) + .orElseThrow(() -> new IllegalArgumentException("TripMember not found for payer")); + + // Dutch Entity 생성 및 저장 + Dutch dutch = new Dutch(); + dutch.setTrip(trip); + dutch.setTripMember(tripMember); + dutch.setPayer(payer); + dutch.setPayee(payee); + dutch.setPerCost(dutchDTO.getAmountToPay()); + dutch.setIsCompleted(false); + dutchRepository.save(dutch); + } } } \ No newline at end of file