그램그램 - 호감도 취소 구현

JIWOO YUN·2024년 5월 31일
0

GramGram

목록 보기
9/11
post-custom-banner

현재 호감도 취소 버튼은 만들어져 있지만 구현은 안되어 있다.

  • 호감도 취소버튼으로 생기는 변화들
    • likeableperson의 데이터 지우기
    • 호감도를 표현한 사람한테 있는 리스트에서 지워주기
    • 호감도 표현을 받은 사람도 지워주기.

호감도 삭제 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());
}
  • id 는 고유 번호이기 때문에 id를 기준으로 해당 삭제 객체를 찾아서 가져오기.
  • 현재는 컨트롤러 단에서 객체를 판별하는 작업까지 맡았기 때문에 이 부분은 서비스단으로 옮기는 게 좋아보인다.
  • log의 경우 해당 컨트롤러가 제대로 작동하는지 확인 하는 용도로 추가해놨었다.

삭제 판별 서비스단으로 옮기기.

@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));
}
  • 삭제판별과 삭제 진행은 service단에서 진행.
profile
열심히하자
post-custom-banner

0개의 댓글