diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/service/ApplyService.java b/src/main/java/org/jullaene/walkmong_back/api/apply/service/ApplyService.java index f41ff7c..8321ce0 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/service/ApplyService.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/service/ApplyService.java @@ -9,6 +9,7 @@ import org.jullaene.walkmong_back.api.apply.dto.res.*; import org.jullaene.walkmong_back.api.apply.repository.ApplyRepository; import org.jullaene.walkmong_back.api.board.domain.Board; +import org.jullaene.walkmong_back.api.board.domain.enums.WalkingStatus; import org.jullaene.walkmong_back.api.board.dto.res.BoardPreviewResponseDto; import org.jullaene.walkmong_back.api.board.repository.BoardRepository; import org.jullaene.walkmong_back.api.chat.dto.res.ChatRoomListResponseDto; @@ -136,10 +137,16 @@ public ApplicationFormResponseDto getApplicationFormInfo(Long boardId, Long appl */ @Transactional public void confirmMatching(Long boardId, Long applyId) { - Apply matchApply=applyRepository.findByApplyIdAndBoardIdAndDelYn(applyId,boardId,"N"); + Apply matchApply = applyRepository.findByApplyIdAndBoardIdAndDelYn(applyId,boardId,"N"); log.info("진입"); matchApply.changeState(); //매칭 완료 상태로 바꾼다 applyRepository.save(matchApply); + + Board board = boardRepository.findByBoardIdAndDelYn(matchApply.getBoardId(), "N") + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.INVALID_BOARD)); + + board.updateWalkingStatus(WalkingStatus.BEFORE); + //나머지 지원을 취소처리 applyRepository.cancelOtherApplications(boardId,applyId); } @@ -178,9 +185,14 @@ public void cancelApply(Long applyId) { *매칭 취소: status를 PENDING으로 바꾼다 */ public void cancelMatching(Long applyId) { - Apply apply=applyRepository.findById(applyId).orElseThrow(()->new CustomException(HttpStatus.BAD_REQUEST,ErrorType.INVALID_USER)); - Apply changedApply=apply.cancelMatching(); + Apply apply = applyRepository.findById(applyId).orElseThrow(()->new CustomException(HttpStatus.BAD_REQUEST,ErrorType.INVALID_USER)); + Apply changedApply = apply.cancelMatching(); applyRepository.save(changedApply); + + Board board = boardRepository.findByBoardIdAndDelYn(apply.getBoardId(), "N") + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.INVALID_BOARD)); + + board.updateWalkingStatus(WalkingStatus.PENDING); } /** diff --git a/src/main/java/org/jullaene/walkmong_back/api/board/domain/Board.java b/src/main/java/org/jullaene/walkmong_back/api/board/domain/Board.java index e8364eb..305cda9 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/board/domain/Board.java +++ b/src/main/java/org/jullaene/walkmong_back/api/board/domain/Board.java @@ -68,11 +68,19 @@ public Board (BoardRequestDto boardRequestDto, String content, Long ownerId) { this.endTime = boardRequestDto.getEndTime(); this.locationNegotiationYn = boardRequestDto.getLocationNegotiationYn(); this.preMeetAvailableYn = boardRequestDto.getPreMeetAvailableYn(); - this.walkingStatus = WalkingStatus.BEFORE; + this.walkingStatus = WalkingStatus.PENDING; this.ownerId = ownerId; } public void updateWalkingStatus(WalkingStatus walkingStatus) { this.walkingStatus = walkingStatus; + + if (walkingStatus.equals(WalkingStatus.PENDING) && this.matchingYn.equals("Y")) { + this.matchingYn = "N"; + } + else if (this.matchingYn.equals("N")) { + this.matchingYn = "Y"; + } } + } diff --git a/src/main/java/org/jullaene/walkmong_back/api/board/repository/impl/BoardRepositoryImpl.java b/src/main/java/org/jullaene/walkmong_back/api/board/repository/impl/BoardRepositoryImpl.java index 847ea98..53addcb 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/board/repository/impl/BoardRepositoryImpl.java +++ b/src/main/java/org/jullaene/walkmong_back/api/board/repository/impl/BoardRepositoryImpl.java @@ -366,6 +366,8 @@ public List getBoardInfoResponse(Long memberId, WalkMatchin BooleanBuilder builder = new BooleanBuilder(); LocalDateTime now = LocalDateTime.now(); + log.info("memberId : " + memberId); + // 매칭 전 : 지원 상태가 PENDING이고 산책 날짜 안 지남 if (status.equals(WalkMatchingStatus.PENDING)) { builder.and(board.walkingStatus.eq(WalkingStatus.PENDING)) @@ -382,8 +384,9 @@ else if (status.equals(WalkMatchingStatus.AFTER)) { } // 매칭 취소 : 지원 상태가 REJECT이거나 지원 상태가 PENDING인데 날짜 지남 else if (status.equals(WalkMatchingStatus.REJECT)) { + log.info("매칭 취소 조건 추가"); builder.and(board.walkingStatus.eq(WalkingStatus.PENDING)) - .and(board.startTime.after(now)); + .and(board.startTime.before(now)); } return queryFactory.selectDistinct( @@ -409,15 +412,15 @@ else if (status.equals(WalkMatchingStatus.REJECT)) { .join(apply) .on(apply.boardId.eq(board.boardId) .and(apply.delYn.eq(delYn))) // Apply와 Board를 연결하는 조건 추가 - .join(member) + .leftJoin(member) .on(member.memberId.eq(apply.memberId) .and(member.delYn.eq(delYn)) .and(board.walkingStatus.ne(WalkingStatus.PENDING)) // board.walkingStatus가 PENDING이 아닌 경우 .and(apply.matchingStatus.eq(MatchingStatus.CONFIRMED))) // apply.matchingStatus가 CONFIRMED인 경우) .where(board.ownerId.eq(memberId) .and(board.delYn.eq(delYn)) - .and(builder) ) + .where(builder) .fetch(); }