리팩토링
- 타임리프 form태그로 api 요청 하던것을 ajax를 사용하여 api 요청하도록 수정
문제 상황
- 카페가 삭제 되었음에도 s3에 저장된 이미지 파일이 남아있음
- 카페 삭제 요청시 이벤트 내역이 있는 경우 에러발생, cascade 설정할 경우 미래에 이벤트가 남아있음에도 함께 삭제되는 문제 발생.
문제 상황 해결을 위한 세부기능 추가
- 카페 삭제시 s3에 저장된 파일 삭제
- 카페 삭제 요청시 data JPA의 StartDateAfter 메소드를 사용하여 금일 날짜 이후에 등록된 이벤트가 있는지 여부를 파악하고 예약된 이벤트 내역이 있는 경우 삭제 불가하도록 분기 처리하였습니다.
1. 리팩토링
기존 코드 - 타임리프 form태그로 요청
<form id="delete-form" method="post" th:action="@{'/cafes/' + ${cafe.id}}">-->
<input name="_method" type="hidden" value="DELETE"/>-->
<button class="delete-button"-->
onclick="return confirm(this.getAttribute('data-confirm-delete'))"-->
th:data-confirm-delete="|정말 삭제하시겠습니까?|">삭제-->
</button>
</form>
수정 코드
# html
<button class="delete-button" th:cafeId="${cafe.id}" th:onclick="deleteCafe(this.getAttribute('cafeId'))">삭제</button>
# js
function deleteCafe(cafeId){
if(confirm("정말 삭제하시겠습니까?")){
$.ajax({
type: "DELETE",
url: `/cafes/${cafeId}`,
data: {},
success: function(response){
alert(response)
location.reload(true);
}
})
}
}
2. 세부 기능 추가
- 카페 삭제시 s3에 저장된 파일 삭제
- 카페 삭제 요청시 예약된 이벤트 내역이 있는 경우 삭제 불가
@Transactional
public String removeCafe(Long id) {
Cafe cafe = cafeRepository.getById(id);
LocalDate now = LocalDate.now();
// 이벤트 존재 여부 확인
Event hasEventAfterNow = eventRepository.findTop1ByCafeIdAndEventStartDateAfter(id, now.toString());
if (hasEventAfterNow != null) {
return "이벤트 예약내역이 존재하므로 삭제가 불가능합니다.";
} else {
List<CafeImage> cafeImages = cafe.getCafeImages();
List<String> imageKeys = new ArrayList<>();
for (CafeImage cafeImage : cafeImages) {
// 3번째 '/'의 위치를 찾아서 +1 번째 부터 문자열 반환받아 key값으로 사용
int location = cafeImage.getCafeImageUrl().indexOf("/", 10);
String imageKey = cafeImage.getCafeImageUrl().substring(location + 1);
imageKeys.add(imageKey);
}
// s3에 저장된 파일들 삭제
s3Service.deleteImages(imageKeys);
cafeRepository.deleteById(id);
return "삭제 성공";
}
}
'프로그래밍 > JPA Project - sparta' 카테고리의 다른 글
카페 평균 평점 추가 (0) | 2022.07.18 |
---|---|
리뷰를 등록한 유저는 추가 등록 불가 처리 (0) | 2022.07.18 |
[타임리프] onclick에 매개변수 보내기 (0) | 2022.07.18 |
다중 클릭 방지 / 중복 요청 방지 (0) | 2022.07.17 |
카페 리뷰 삭제버튼 작성자에게만 보이게하기 (0) | 2022.07.17 |