현재 호감도 취소 버튼은 만들어져 있지만 구현은 안되어 있다.
호감도 삭제 uri 구조
/likeablePerson/delete/{id}
호감도 삭제시에 해당 uri로 접근시에 권한이 있는지 확인을 하는 코드가 필요하다.
호감도 삭제 controller 부분
@PreAuthorize("isAuthenticated()")
@PostMapping("delete/{id}")
public String deletelike(@PathVariable("id") Long id) {
log.info("삭제 판별");
LikeablePerson likeablePerson = likeablePersonService.findById(id).orElse(null);
if (likeablePerson == null) {
log.info("취소된 호감 대상입니다.");
return rq.historyBack("이미 취소된 호감대상입니다.");
}
if (!Objects.equals(rq.getMember().getInstaMember().getId(), likeablePerson.getFromInstaMember().getId())) {
log.info("권한이 없습니다.");
return rq.historyBack("권한 없음");
}
log.info("삭제 가능");
RsData<LikeablePerson> rsData = likeablePersonService.deleteLikeablePerson(likeablePerson);
if (rsData.isFail()) {
log.info("실패");
return rq.historyBack(rsData.getMsg());
}
log.info("삭제 완료");
return rq.redirectWithMsg("/likeablePerson/list", rsData.getMsg());
}
삭제 판별 서비스단으로 옮기기.
@Transactional
public RsData deleteLikeablePerson(InstaMember instaMember, Long id) {
LikeablePerson likeablePerson = findById(id).orElse(null);
if (likeablePerson == null) {
return RsData.of("F-1", "취소된 호감 대상입니다.");
}
if (!Objects.equals(instaMember.getId(), likeablePerson.getFromInstaMember().getId())) {
log.info("권한이 없습니다.");
return RsData.of("F-1", "권한이 없습니다.");
}
String tolikeablePersonUsername = likeablePerson.getToInstaMember().getUsername();
likeablePersonRepository.delete(likeablePerson);
return RsData.of("S-1", "%s 님을 호감 취소하엿습니다.".formatted(tolikeablePersonUsername));
}