공고 삭제시 쿼리
1.
2.


3.
4.


- 이후 매칭 , 해당 매칭의 신청의 수,해당 매칭들의 모든 메세지의 수 만큼 delete 쿼리가 나갑니다.
구현 코드
// 매칭을 삭제하는 메서드 MatchService @Transactional public void delete(Long userId, Long id) { Match match = matchRepository.findById(id) .orElseThrow(() -> new EntityNotFoundException(ErrorCode.MATCH_NOT_FOUND, MessageFormat.format("matchId = {0}", id))); if (match.getStatus().isMatched()) { throw new BusinessException(ErrorCode.INVALID_DELETE_REQUEST, MessageFormat.format("matchId = {0}", id)); } if (!Objects.equals(match.getUser().getId(), userId)) { throw new BusinessException(ErrorCode.AUTHOR_NOT_MATCHED, MessageFormat.format("userId = {0}, matchId = {1}", userId, match.getId())); } matchProposalService.deleteByMatches(id); matchRepository.delete(match); }
// 해당 신청들의 모든 메세지를 삭제하는 메서드 MatchChatService @Transactional public void deleteAllByProposals(List<MatchProposalResponse.SimpleProposal> proposalResponses) { List<MatchProposal> proposals = proposalResponses.stream() .map((proposal -> MatchProposal.builder() .id(proposal.id()) .build())).toList(); matchChatRepository.deleteAllByProposalIn(proposals); } void deleteAllByProposalIn(List<MatchProposal> proposals); //채팅 삭제에 사용되는 메서드, ProposalRepository
// 해당 매칭의 모든 매칭 신청 요청을 삭제하는 메서드 MatchProposalService @Transactional public void deleteByMatches(Long matchId) { List<MatchProposal> foundProposals = proposalRepository.findByMatchId(matchId); List<MatchProposalResponse.SimpleProposal> proposalResponses = foundProposals.stream() .map(response -> new MatchProposalResponse.SimpleProposal(response.getId())) .toList(); matchChatService.deleteAllByProposals(proposalResponses); proposalRepository.deleteAllByMatchId(matchId); } void deleteAllByMatchId(Long id); // 매칭 신청 삭제에 사용되는 메서드, MatchChatRepository