From 5475a85c375a45aec0d85d28341ea850ce8cd617 Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 15 Nov 2024 18:05:12 +0900 Subject: [PATCH 01/14] =?UTF-8?q?feat:=20#5=20=EC=82=B0=EC=B1=85=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../walkmong_back/api/apply/domain/Apply.java | 4 +++- .../api/apply/dto/req/ApplyRequestDto.java | 24 +++++++++++++++++++ .../api/apply/rest/ApplyController.java | 12 ++++++++++ .../api/apply/service/ApplyService.java | 22 +++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java index 4bc0c1a..28d9493 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; +import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.Comment; import org.hibernate.annotations.DynamicUpdate; @@ -11,6 +12,7 @@ @Table(name = "apply") @Entity +@Getter @NoArgsConstructor @AllArgsConstructor @Builder @@ -55,7 +57,7 @@ public class Apply extends BaseEntity { @Comment("입마개 필요 여부") @Column(columnDefinition = "VARCHAR(1) default 'Y'") - private String nuzzleYn; + private String muzzleYn; @Comment("리드줄 필요 여부") @Column(columnDefinition = "VARCHAR(1) default 'Y'") diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java new file mode 100644 index 0000000..1a009b9 --- /dev/null +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java @@ -0,0 +1,24 @@ +package org.jullaene.walkmong_back.api.apply.dto.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ApplyRequestDto { + private String dongAddress; + private String roadAddress; + private Double latitude; + private Double longitude; + private String addressDetail; + private String addressMemo; + private String poopBagYn; + private String muzzleYn; + private String dogCollarYn; + private String preMeetingYn; + private String memoToOwner; +} diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index d259ac9..9a3fd34 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -1,7 +1,12 @@ package org.jullaene.walkmong_back.api.apply.rest; import lombok.RequiredArgsConstructor; +import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.api.apply.service.ApplyService; +import org.jullaene.walkmong_back.common.BasicResponse; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -10,4 +15,11 @@ @RequestMapping("/api/v1/apply") public class ApplyController { private final ApplyService applyService; + + @PostMapping("/{boardId}") + public ResponseEntity> saveApply(@RequestBody ApplyRequestDto applyRequestDto){ + applyService.saveApply(applyRequestDto); + + return ResponseEntity.ok(BasicResponse.ofCreateSuccess(applyService.saveApply(applyRequestDto))); + } } 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 8dbc122..8968292 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 @@ -1,11 +1,33 @@ package org.jullaene.walkmong_back.api.apply.service; import lombok.RequiredArgsConstructor; +import org.jullaene.walkmong_back.api.apply.domain.Apply; +import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.api.apply.repository.ApplyRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor public class ApplyService { private final ApplyRepository applyRepository; + + @Transactional + public Long saveApply(ApplyRequestDto applyRequestDto){ + Apply apply=Apply.builder() + .dongAddress(applyRequestDto.getDongAddress()) + .roadAddress(applyRequestDto.getRoadAddress()) + .latitude(applyRequestDto.getLatitude()) + .longitude(applyRequestDto.getLongitude()) + .addressDetail(applyRequestDto.getAddressDetail()) + .addressMemo(applyRequestDto.getAddressMemo()) + .poopBagYn(applyRequestDto.getPoopBagYn()) + .muzzleYn(applyRequestDto.getMuzzleYn()) + .dogCollarYn(applyRequestDto.getDogCollarYn()) + .preMeetingYn(applyRequestDto.getPreMeetingYn()) + .memoToOwner(applyRequestDto.getMemoToOwner()) + .build(); + + return applyRepository.save(apply).getApplyId(); + } } From 152f2eef48aa9752f33e4f8096550eb2e4fc9f1e Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 15 Nov 2024 22:32:34 +0900 Subject: [PATCH 02/14] =?UTF-8?q?refactor:=20=EC=82=B0=EC=B1=85=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../walkmong_back/api/apply/domain/Apply.java | 18 ++++++++++++++++++ .../api/apply/rest/ApplyController.java | 2 -- .../api/apply/service/ApplyService.java | 15 +-------------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java index 28d9493..95f0629 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java @@ -8,6 +8,7 @@ import org.hibernate.annotations.Comment; import org.hibernate.annotations.DynamicUpdate; import org.jullaene.walkmong_back.api.apply.domain.enums.MatchingStatus; +import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.common.BaseEntity; @Table(name = "apply") @@ -69,4 +70,21 @@ public class Apply extends BaseEntity { @Comment("반려인에게 전달할 메시지") private String memoToOwner; + + public static Apply toEntity(ApplyRequestDto applyRequestDto) { + return Apply.builder() + .dongAddress(applyRequestDto.getDongAddress()) + .roadAddress(applyRequestDto.getRoadAddress()) + .latitude(applyRequestDto.getLatitude()) + .longitude(applyRequestDto.getLongitude()) + .addressDetail(applyRequestDto.getAddressDetail()) + .addressMemo(applyRequestDto.getAddressMemo()) + .poopBagYn(applyRequestDto.getPoopBagYn()) + .muzzleYn(applyRequestDto.getMuzzleYn()) + .dogCollarYn(applyRequestDto.getDogCollarYn()) + .preMeetingYn(applyRequestDto.getPreMeetingYn()) + .memoToOwner(applyRequestDto.getMemoToOwner()) + .build(); + } + } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index 9a3fd34..eac78ca 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -18,8 +18,6 @@ public class ApplyController { @PostMapping("/{boardId}") public ResponseEntity> saveApply(@RequestBody ApplyRequestDto applyRequestDto){ - applyService.saveApply(applyRequestDto); - return ResponseEntity.ok(BasicResponse.ofCreateSuccess(applyService.saveApply(applyRequestDto))); } } 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 8968292..3edd4d3 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 @@ -14,20 +14,7 @@ public class ApplyService { @Transactional public Long saveApply(ApplyRequestDto applyRequestDto){ - Apply apply=Apply.builder() - .dongAddress(applyRequestDto.getDongAddress()) - .roadAddress(applyRequestDto.getRoadAddress()) - .latitude(applyRequestDto.getLatitude()) - .longitude(applyRequestDto.getLongitude()) - .addressDetail(applyRequestDto.getAddressDetail()) - .addressMemo(applyRequestDto.getAddressMemo()) - .poopBagYn(applyRequestDto.getPoopBagYn()) - .muzzleYn(applyRequestDto.getMuzzleYn()) - .dogCollarYn(applyRequestDto.getDogCollarYn()) - .preMeetingYn(applyRequestDto.getPreMeetingYn()) - .memoToOwner(applyRequestDto.getMemoToOwner()) - .build(); - + Apply apply=Apply.toEntity(applyRequestDto); return applyRepository.save(apply).getApplyId(); } } From 2ab8d74b1c507fe2576f144fc5c6cb649b5b5b4f Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 15 Nov 2024 18:05:12 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat:=20#5=20=EC=82=B0=EC=B1=85=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/apply/rest/ApplyController.java | 2 ++ .../api/apply/service/ApplyService.java | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index eac78ca..9a3fd34 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -18,6 +18,8 @@ public class ApplyController { @PostMapping("/{boardId}") public ResponseEntity> saveApply(@RequestBody ApplyRequestDto applyRequestDto){ + applyService.saveApply(applyRequestDto); + return ResponseEntity.ok(BasicResponse.ofCreateSuccess(applyService.saveApply(applyRequestDto))); } } 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 3edd4d3..8968292 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 @@ -14,7 +14,20 @@ public class ApplyService { @Transactional public Long saveApply(ApplyRequestDto applyRequestDto){ - Apply apply=Apply.toEntity(applyRequestDto); + Apply apply=Apply.builder() + .dongAddress(applyRequestDto.getDongAddress()) + .roadAddress(applyRequestDto.getRoadAddress()) + .latitude(applyRequestDto.getLatitude()) + .longitude(applyRequestDto.getLongitude()) + .addressDetail(applyRequestDto.getAddressDetail()) + .addressMemo(applyRequestDto.getAddressMemo()) + .poopBagYn(applyRequestDto.getPoopBagYn()) + .muzzleYn(applyRequestDto.getMuzzleYn()) + .dogCollarYn(applyRequestDto.getDogCollarYn()) + .preMeetingYn(applyRequestDto.getPreMeetingYn()) + .memoToOwner(applyRequestDto.getMemoToOwner()) + .build(); + return applyRepository.save(apply).getApplyId(); } } From 9812d8b392304fa81495b9b443488a21d9699adc Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 15 Nov 2024 22:32:34 +0900 Subject: [PATCH 04/14] =?UTF-8?q?refactor:=20=EC=82=B0=EC=B1=85=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/apply/rest/ApplyController.java | 2 -- .../api/apply/service/ApplyService.java | 15 +-------------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index 9a3fd34..eac78ca 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -18,8 +18,6 @@ public class ApplyController { @PostMapping("/{boardId}") public ResponseEntity> saveApply(@RequestBody ApplyRequestDto applyRequestDto){ - applyService.saveApply(applyRequestDto); - return ResponseEntity.ok(BasicResponse.ofCreateSuccess(applyService.saveApply(applyRequestDto))); } } 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 8968292..3edd4d3 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 @@ -14,20 +14,7 @@ public class ApplyService { @Transactional public Long saveApply(ApplyRequestDto applyRequestDto){ - Apply apply=Apply.builder() - .dongAddress(applyRequestDto.getDongAddress()) - .roadAddress(applyRequestDto.getRoadAddress()) - .latitude(applyRequestDto.getLatitude()) - .longitude(applyRequestDto.getLongitude()) - .addressDetail(applyRequestDto.getAddressDetail()) - .addressMemo(applyRequestDto.getAddressMemo()) - .poopBagYn(applyRequestDto.getPoopBagYn()) - .muzzleYn(applyRequestDto.getMuzzleYn()) - .dogCollarYn(applyRequestDto.getDogCollarYn()) - .preMeetingYn(applyRequestDto.getPreMeetingYn()) - .memoToOwner(applyRequestDto.getMemoToOwner()) - .build(); - + Apply apply=Apply.toEntity(applyRequestDto); return applyRepository.save(apply).getApplyId(); } } From 8dd4cce8a191231cb33c144d7c9e60fa9961de4e Mon Sep 17 00:00:00 2001 From: Eunjeong Lee Date: Sat, 16 Nov 2024 02:23:30 +0900 Subject: [PATCH 05/14] =?UTF-8?q?fix:=20=EC=82=B0=EC=B1=85=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20api=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20[#1?= =?UTF-8?q?2]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 산책 지원 api에서 boardId와 memoToOwner 저장 안되는 문제 해결 memberId 연결 본인이 쓴 게시글에는 지원 불가, 한 게시글에는 여러번 지원 불가 에러 추가 --- .../walkmong_back/api/apply/domain/Apply.java | 32 ++-- .../api/apply/dto/req/ApplyRequestDto.java | 3 +- .../api/apply/repository/ApplyRepository.java | 1 + .../api/apply/rest/ApplyController.java | 13 +- .../api/apply/service/ApplyService.java | 29 +++- .../repository/BoardRepositoryCustom.java | 14 ++ .../repository/impl/BoardRepositoryImpl.java | 138 ++++++++++++++++++ .../common/exception/ErrorType.java | 4 + 8 files changed, 207 insertions(+), 27 deletions(-) create mode 100644 src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepositoryCustom.java create mode 100644 src/main/java/org/jullaene/walkmong_back/api/board/repository/impl/BoardRepositoryImpl.java diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java index 95f0629..1f72079 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java @@ -15,8 +15,6 @@ @Entity @Getter @NoArgsConstructor -@AllArgsConstructor -@Builder @DynamicUpdate public class Apply extends BaseEntity { @Id @@ -71,20 +69,22 @@ public class Apply extends BaseEntity { @Comment("반려인에게 전달할 메시지") private String memoToOwner; - public static Apply toEntity(ApplyRequestDto applyRequestDto) { - return Apply.builder() - .dongAddress(applyRequestDto.getDongAddress()) - .roadAddress(applyRequestDto.getRoadAddress()) - .latitude(applyRequestDto.getLatitude()) - .longitude(applyRequestDto.getLongitude()) - .addressDetail(applyRequestDto.getAddressDetail()) - .addressMemo(applyRequestDto.getAddressMemo()) - .poopBagYn(applyRequestDto.getPoopBagYn()) - .muzzleYn(applyRequestDto.getMuzzleYn()) - .dogCollarYn(applyRequestDto.getDogCollarYn()) - .preMeetingYn(applyRequestDto.getPreMeetingYn()) - .memoToOwner(applyRequestDto.getMemoToOwner()) - .build(); + @Builder + public Apply (Long memberId, Long boardId, ApplyRequestDto applyRequestDto) { + this.memberId = memberId; + this.boardId = boardId; + matchingStatus = MatchingStatus.PENDING; + dongAddress = applyRequestDto.getDongAddress(); + roadAddress = applyRequestDto.getRoadAddress(); + latitude = applyRequestDto.getLatitude(); + longitude = applyRequestDto.getLongitude(); + addressDetail = applyRequestDto.getAddressDetail(); + addressMemo = applyRequestDto.getAddressMemo(); + poopBagYn = applyRequestDto.getPoopBagYn(); + muzzleYn = applyRequestDto.getMuzzleYn(); + dogCollarYn = applyRequestDto.getDogCollarYn(); + preMeetingYn = applyRequestDto.getPreMeetingYn(); + memoToOwner = applyRequestDto.getMessageToOwner(); } } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java index 1a009b9..66b37e5 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/req/ApplyRequestDto.java @@ -6,7 +6,6 @@ import lombok.NoArgsConstructor; @Getter -@Builder @AllArgsConstructor @NoArgsConstructor public class ApplyRequestDto { @@ -20,5 +19,5 @@ public class ApplyRequestDto { private String muzzleYn; private String dogCollarYn; private String preMeetingYn; - private String memoToOwner; + private String messageToOwner; } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java index 56c9595..8c3174e 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java @@ -6,4 +6,5 @@ @Repository public interface ApplyRepository extends JpaRepository { + boolean existsByBoardIdAndMemberIdAndDelYn(Long boardId, Long memberId, String delYn); } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index eac78ca..f5c5009 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -5,19 +5,18 @@ import org.jullaene.walkmong_back.api.apply.service.ApplyService; import org.jullaene.walkmong_back.common.BasicResponse; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor -@RequestMapping("/api/v1/apply") +@RequestMapping("/api/v1/walking/apply") public class ApplyController { private final ApplyService applyService; @PostMapping("/{boardId}") - public ResponseEntity> saveApply(@RequestBody ApplyRequestDto applyRequestDto){ - return ResponseEntity.ok(BasicResponse.ofCreateSuccess(applyService.saveApply(applyRequestDto))); + public ResponseEntity> saveApply( + @PathVariable("boardId") Long boardId, + @RequestBody ApplyRequestDto applyRequestDto){ + return ResponseEntity.ok(BasicResponse.ofCreateSuccess(applyService.saveApply(boardId, applyRequestDto))); } } 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 3edd4d3..05a0329 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 @@ -4,6 +4,12 @@ import org.jullaene.walkmong_back.api.apply.domain.Apply; import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.api.apply.repository.ApplyRepository; +import org.jullaene.walkmong_back.api.board.repository.BoardRepository; +import org.jullaene.walkmong_back.api.member.domain.Member; +import org.jullaene.walkmong_back.api.member.service.MemberService; +import org.jullaene.walkmong_back.common.exception.CustomException; +import org.jullaene.walkmong_back.common.exception.ErrorType; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -11,10 +17,29 @@ @RequiredArgsConstructor public class ApplyService { private final ApplyRepository applyRepository; + private final BoardRepository boardRepository; + private final MemberService memberService; @Transactional - public Long saveApply(ApplyRequestDto applyRequestDto){ - Apply apply=Apply.toEntity(applyRequestDto); + public Long saveApply(Long boardId, ApplyRequestDto applyRequestDto){ + Member member = memberService.getMemberFromUserDetail(); + + // 본인이 쓴 게시글에는 지원 불가 + if (boardRepository.existsByBoardIdAndMemberIdAndDelYn(boardId, member.getMemberId(), "N")) { + throw new CustomException(HttpStatus.FORBIDDEN, ErrorType.CANNOT_SELF_APPLY); + } + + // 한 게시글에 여러 번 지원 불가 + if (applyRepository.existsByBoardIdAndMemberIdAndDelYn(boardId, member.getMemberId(), "N")) { + throw new CustomException(HttpStatus.FORBIDDEN, ErrorType.CANNOT_DUPLICATED_APPLY); + } + + Apply apply = Apply.builder() + .memberId(member.getMemberId()) + .boardId(boardId) + .applyRequestDto(applyRequestDto) + .build(); + return applyRepository.save(apply).getApplyId(); } } diff --git a/src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepositoryCustom.java b/src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepositoryCustom.java new file mode 100644 index 0000000..7b7dfb1 --- /dev/null +++ b/src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepositoryCustom.java @@ -0,0 +1,14 @@ +package org.jullaene.walkmong_back.api.board.repository; + +import org.jullaene.walkmong_back.api.board.dto.res.BoardResponseDto; +import org.jullaene.walkmong_back.api.dog.domain.enums.DogSize; +import org.jullaene.walkmong_back.api.member.domain.Address; +import org.jullaene.walkmong_back.api.member.domain.enums.DistanceRange; + +import java.time.LocalDate; +import java.util.List; + +public interface BoardRepositoryCustom { + List getBoardsWithFilters(LocalDate date, Address walkerAddress, DistanceRange distance, DogSize dogSize, String matchingYn); + boolean existsByBoardIdAndMemberIdAndDelYn(Long boardId, Long memberId, String delYn); +} 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 new file mode 100644 index 0000000..ab396e5 --- /dev/null +++ b/src/main/java/org/jullaene/walkmong_back/api/board/repository/impl/BoardRepositoryImpl.java @@ -0,0 +1,138 @@ +package org.jullaene.walkmong_back.api.board.repository.impl; + +import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberTemplate; +import com.querydsl.core.types.dsl.StringTemplate; +import com.querydsl.jpa.JPAExpressions; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.extern.slf4j.Slf4j; +import org.jullaene.walkmong_back.api.board.domain.QBoard; +import org.jullaene.walkmong_back.api.board.dto.res.BoardResponseDto; +import org.jullaene.walkmong_back.api.board.repository.BoardRepositoryCustom; +import org.jullaene.walkmong_back.api.dog.domain.QDog; +import org.jullaene.walkmong_back.api.dog.domain.enums.DogSize; +import org.jullaene.walkmong_back.api.member.domain.Address; +import org.jullaene.walkmong_back.api.member.domain.QAddress; +import org.jullaene.walkmong_back.api.member.domain.enums.DistanceRange; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Slf4j +public class BoardRepositoryImpl implements BoardRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + public BoardRepositoryImpl(JPAQueryFactory queryFactory) { + this.queryFactory = queryFactory; + } + + /** + * 게시글 리스트 조회 + * date, walkerAddress, distance, dogSize, matchingYn을 기준으로 적용 + * */ + @Override + public List getBoardsWithFilters(LocalDate date, Address walkerAddress, DistanceRange distance, DogSize dogSize, String matchingYn) { + QBoard board = QBoard.board; + QDog dog = QDog.dog; + QAddress ownerAddress = QAddress.address; + + BooleanBuilder builder = new BooleanBuilder(); + + // date가 null이면 당일을 조건에 삽입 + if (date == null) { + date = LocalDate.now(); + } + LocalDateTime startOfDay = date.atStartOfDay(); + LocalDateTime endOfDay = date.atTime(23, 59, 59, 999_999_999); // 23:59:59.999999 + + builder.and(board.startTime.between(startOfDay, endOfDay)); + + if (dogSize != null) { + builder.and(board.dogId.in( + JPAExpressions.select(dog.dogId) + .from(dog) + .where(dog.dogSize.eq(dogSize)))); + } + + if (matchingYn != null) { + builder.and(board.matchingYn.eq(matchingYn)); + } + + if (distance == null) { + distance = walkerAddress.getDistanceRange(); + } + + // 거리 계산 + NumberTemplate distanceExpression = Expressions.numberTemplate( + Double.class, + "ST_Distance_Sphere(point({0}, {1}), point({2}, {3}))", + JPAExpressions.select(ownerAddress.longitude) + .from(ownerAddress) + .where(ownerAddress.addressId.eq(board.ownerAddressId)), + JPAExpressions.select(ownerAddress.latitude) + .from(ownerAddress) + .where(ownerAddress.addressId.eq(board.ownerAddressId)), walkerAddress.getLongitude(), walkerAddress.getLatitude() + ); + + BooleanExpression isWithinRange = distanceExpression.lt(distance.getRange()); + + // 거리 결과를 실제로 조회할 때 + Double distanceResult = queryFactory.select(distanceExpression).from(board).fetchOne(); + log.info("Calculated Distance: " + distanceResult); + + StringTemplate startTimeExpression = Expressions.stringTemplate("DATE_FORMAT({0}, '%H:%i')", board.startTime); + StringTemplate endTimeExpression = Expressions.stringTemplate("DATE_FORMAT({0}, '%H:%i')", board.endTime); + + return queryFactory.select( + Projections.constructor(BoardResponseDto.class, + startTimeExpression.as("startTime"), + endTimeExpression.as("endTime"), + board.matchingYn.as("matchingYn"), + dog.name.as("dogName"), + dog.profile.as("dogProfile"), + dog.gender.as("dogGender"), + dog.breed.as("breed"), + dog.weight.as("weight"), + dog.dogSize.as("dogSize"), + board.content.as("content"), + ownerAddress.dongAddress.as("dongAddress"), + distanceExpression.as("distance") + ) + ) + .from(board) + .leftJoin(dog).on(dog.dogId.eq(board.dogId)) + .leftJoin(ownerAddress).on(ownerAddress.addressId.eq(board.ownerAddressId)) + .where(builder) + .where(isWithinRange) + .orderBy(board.startTime.asc()) + .fetch(); + } + + /** + * boardId와 memberId를 기준으로 해당 게시글의 작성자인지 확인 + * */ + @Override + public boolean existsByBoardIdAndMemberIdAndDelYn(Long boardId, Long memberId, String delYn) { + QBoard board = QBoard.board; + QDog dog = QDog.dog; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(board.boardId.eq(boardId)); + builder.and(board.delYn.eq(delYn)); + builder.and(dog.memberId.eq(memberId)); + + long count = queryFactory + .selectFrom(board) + .join(dog).on(board.dogId.eq(dog.dogId).and(dog.delYn.eq(delYn))) + .where(builder) + .fetch() + .size(); + + return count > 0; + } +} diff --git a/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java b/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java index 3a81491..903632a 100644 --- a/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java +++ b/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java @@ -18,6 +18,10 @@ public enum ErrorType { INVALID_TOKEN("유효하지 않은 토큰입니다."), INTERNAL_SERVER("서버 오류입니다."), UNAUTHORIZED_UPDATE("수정 권한이 없는 유저입니다."), + DOG_NOT_FOUND("존재하지 않는 강아지입니다."), + INVALID_ADDRESS("유효하지 않은 주소입니다."), + CANNOT_SELF_APPLY("본인의 게시글에는 지원할 수 없습니다."), + CANNOT_DUPLICATED_APPLY("한 게시글에 여러 번 지원할 수 없습니다."), ; private String message; From 747ce9fd967c9399d1d02ed4e09a950317c0583e Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 15 Nov 2024 18:05:12 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat:=20#5=20=EC=82=B0=EC=B1=85=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jullaene/walkmong_back/api/apply/domain/Apply.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java index 1f72079..eeac7ea 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java @@ -18,6 +18,7 @@ @DynamicUpdate public class Apply extends BaseEntity { @Id + @Getter @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "apply_id") private Long applyId; From f5bea4405eb8caea988cd17d20d7ee6a5eb33e3a Mon Sep 17 00:00:00 2001 From: Eunjeong Lee <77772331+eun0901@users.noreply.github.com> Date: Sat, 16 Nov 2024 05:34:33 +0900 Subject: [PATCH 07/14] =?UTF-8?q?fix:=20=EC=82=B0=EC=B1=85=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20api=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: 산책 지원 api 오류 수정 --- .../walkmong_back/api/apply/domain/Apply.java | 1 - .../api/board/service/BoardService.java | 49 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java index eeac7ea..c0914ef 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java @@ -13,7 +13,6 @@ @Table(name = "apply") @Entity -@Getter @NoArgsConstructor @DynamicUpdate public class Apply extends BaseEntity { diff --git a/src/main/java/org/jullaene/walkmong_back/api/board/service/BoardService.java b/src/main/java/org/jullaene/walkmong_back/api/board/service/BoardService.java index 689c391..a9eef88 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/board/service/BoardService.java +++ b/src/main/java/org/jullaene/walkmong_back/api/board/service/BoardService.java @@ -1,11 +1,60 @@ package org.jullaene.walkmong_back.api.board.service; import lombok.RequiredArgsConstructor; +import org.jullaene.walkmong_back.api.board.dto.res.BoardResponseDto; import org.jullaene.walkmong_back.api.board.repository.BoardRepository; +import org.jullaene.walkmong_back.api.dog.domain.enums.DogSize; +import org.jullaene.walkmong_back.api.member.domain.Address; +import org.jullaene.walkmong_back.api.member.domain.Member; +import org.jullaene.walkmong_back.api.member.domain.enums.DistanceRange; +import org.jullaene.walkmong_back.api.member.repository.AddressRepository; +import org.jullaene.walkmong_back.api.member.service.MemberService; +import org.jullaene.walkmong_back.common.exception.CustomException; +import org.jullaene.walkmong_back.common.exception.ErrorType; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.util.List; + @Service @RequiredArgsConstructor public class BoardService { private final BoardRepository boardRepository; + private final AddressRepository addressRepository; + private final MemberService memberService; + + /** + * 게시글 리스트 조회 + * */ + public List getBoards(LocalDate date, Long addressId, DistanceRange distance, DogSize dogSize, String matchingYn) { + Member member = memberService.getMemberFromUserDetail(); + + // 주소 id가 null이면 기본 주소 반환, 주소 id가 null이 아니면 해당 id를 가진 주소 반환 + Address address; + if (addressId == null) { + address = getBasicAddressAndDelYn(member.getMemberId(), "N"); + } + else { + address = getAddressByIdAndDelYn(addressId, "Y"); + } + return boardRepository.getBoardsWithFilters(date, address, distance, dogSize, matchingYn); + } + + /** + * 주어진 멤버가 가진 기본 address를 반환 + * */ + private Address getBasicAddressAndDelYn(Long memberId, String delYn) { + return addressRepository.findByMemberIdAndBasicAddressYnAndDelYn(memberId,"Y", delYn) + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.INVALID_ADDRESS)); + } + + /** + * 주어진 addressId를 이용하여 address 반환 + * */ + private Address getAddressByIdAndDelYn (Long addressId, String delYn) { + return addressRepository.findByAddressIdAndDelYn(addressId, delYn) + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.INVALID_ADDRESS)); + + } } From 263ba9c692601e99ef4d70acb910543fb4f2179b Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 15 Nov 2024 18:05:12 +0900 Subject: [PATCH 08/14] =?UTF-8?q?feat:=20#5=20=EC=82=B0=EC=B1=85=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jullaene/walkmong_back/api/apply/rest/ApplyController.java | 1 - .../jullaene/walkmong_back/api/apply/service/ApplyService.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index f5c5009..ad5dde4 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -6,7 +6,6 @@ import org.jullaene.walkmong_back.common.BasicResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; - @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/walking/apply") 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 05a0329..fdfaf6b 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 @@ -40,6 +40,7 @@ public Long saveApply(Long boardId, ApplyRequestDto applyRequestDto){ .applyRequestDto(applyRequestDto) .build(); + return applyRepository.save(apply).getApplyId(); } } From a57410b0fa8982e073d219c7b267d814c0908444 Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 15 Nov 2024 22:32:34 +0900 Subject: [PATCH 09/14] =?UTF-8?q?refactor:=20=EC=82=B0=EC=B1=85=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jullaene/walkmong_back/api/apply/service/ApplyService.java | 1 - 1 file changed, 1 deletion(-) 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 fdfaf6b..05a0329 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 @@ -40,7 +40,6 @@ public Long saveApply(Long boardId, ApplyRequestDto applyRequestDto){ .applyRequestDto(applyRequestDto) .build(); - return applyRepository.save(apply).getApplyId(); } } From dcc63f2b52a8460771dfb94c009481a41fbde61f Mon Sep 17 00:00:00 2001 From: Eunjeong Lee Date: Sat, 16 Nov 2024 02:23:30 +0900 Subject: [PATCH 10/14] =?UTF-8?q?fix:=20=EC=82=B0=EC=B1=85=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20api=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20[#1?= =?UTF-8?q?2]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 산책 지원 api에서 boardId와 memoToOwner 저장 안되는 문제 해결 memberId 연결 본인이 쓴 게시글에는 지원 불가, 한 게시글에는 여러번 지원 불가 에러 추가 --- .../jullaene/walkmong_back/api/apply/rest/ApplyController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index ad5dde4..f5c5009 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -6,6 +6,7 @@ import org.jullaene.walkmong_back.common.BasicResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; + @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/walking/apply") From 3579a067ed9283a8a1154127d7a52883825d73c3 Mon Sep 17 00:00:00 2001 From: dnwldla Date: Fri, 20 Dec 2024 11:18:05 +0900 Subject: [PATCH 11/14] =?UTF-8?q?feat:=20=EC=82=B0=EC=B1=85=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20=EC=8B=9C=20=EC=B5=9C=EC=A2=85=20=EB=A7=A4=EC=B9=AD?= =?UTF-8?q?=20=ED=99=95=EC=9D=B8=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../walkmong_back/api/apply/domain/Apply.java | 1 + .../api/apply/dto/res/ApplyInfoDto.java | 28 +++++++++++ .../api/apply/rest/ApplyController.java | 12 +++++ .../api/apply/service/ApplyService.java | 48 +++++++++++++++++++ .../walkmong_back/api/board/domain/Board.java | 1 + .../walkmong_back/api/dog/domain/Dog.java | 1 + .../common/exception/ErrorType.java | 5 ++ 7 files changed, 96 insertions(+) create mode 100644 src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java index c0914ef..4e029d1 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java @@ -11,6 +11,7 @@ import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.common.BaseEntity; +@Getter @Table(name = "apply") @Entity @NoArgsConstructor diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java new file mode 100644 index 0000000..5205da7 --- /dev/null +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java @@ -0,0 +1,28 @@ +package org.jullaene.walkmong_back.api.apply.dto.res; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.jullaene.walkmong_back.api.dog.domain.enums.DogSize; +import org.jullaene.walkmong_back.common.enums.Gender; + +import java.time.LocalDateTime; + +@Getter +@RequiredArgsConstructor +public class ApplyInfoDto { + private final String dogName; + private final Gender dogGender; + private final String dogBreed; + private final DogSize dogSize; + private final String memberName; + private final String memberProfile; + private final Gender memberGender; + private final String dongAddress; + private final LocalDateTime boardStartTime; + private final LocalDateTime boardEndTime; + private final String addressDetail; + private final String muzzleYn; + private final String poopBagYn; + private final String preMeetingYn; + private final String memoToOwner; +} diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index f5c5009..a56aa58 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -1,12 +1,15 @@ package org.jullaene.walkmong_back.api.apply.rest; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; +import org.jullaene.walkmong_back.api.apply.dto.res.ApplyInfoDto; import org.jullaene.walkmong_back.api.apply.service.ApplyService; import org.jullaene.walkmong_back.common.BasicResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +@Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/walking/apply") @@ -19,4 +22,13 @@ public ResponseEntity> saveApply( @RequestBody ApplyRequestDto applyRequestDto){ return ResponseEntity.ok(BasicResponse.ofCreateSuccess(applyService.saveApply(boardId, applyRequestDto))); } + + @GetMapping("/{boardId}") + public ResponseEntity> getApplyInfo( + @PathVariable("boardId") Long boardId + ){ + ApplyInfoDto applyInfoDto=applyService.getApplyInfo(boardId); + return ResponseEntity.ok(BasicResponse.ofSuccess(applyInfoDto)); + } + } 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 05a0329..e8ec904 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 @@ -1,10 +1,15 @@ package org.jullaene.walkmong_back.api.apply.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.jullaene.walkmong_back.api.apply.domain.Apply; import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; +import org.jullaene.walkmong_back.api.apply.dto.res.ApplyInfoDto; 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.repository.BoardRepository; +import org.jullaene.walkmong_back.api.dog.domain.Dog; +import org.jullaene.walkmong_back.api.dog.repository.DogRepository; import org.jullaene.walkmong_back.api.member.domain.Member; import org.jullaene.walkmong_back.api.member.service.MemberService; import org.jullaene.walkmong_back.common.exception.CustomException; @@ -13,11 +18,15 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Optional; + +@Slf4j @Service @RequiredArgsConstructor public class ApplyService { private final ApplyRepository applyRepository; private final BoardRepository boardRepository; + private final DogRepository dogRepository; private final MemberService memberService; @Transactional @@ -42,4 +51,43 @@ public Long saveApply(Long boardId, ApplyRequestDto applyRequestDto){ return applyRepository.save(apply).getApplyId(); } + + public ApplyInfoDto getApplyInfo(Long boardId) { + Member member = memberService.getMemberFromUserDetail(); + + // 게시글 id로 지원 내역 찾기 + Apply apply = applyRepository.findById(boardId) + .orElseThrow(() ->new CustomException(HttpStatus.NOT_FOUND,ErrorType.APPLY_NOT_FOUND)); + + // 게시글의 강아지 아이디 찾기 + Board board = boardRepository.findById(boardId) + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND,ErrorType.POST_NOT_FOUND)); + + Dog dog = dogRepository.findById(board.getDogId()) + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND,ErrorType.DOG_NOT_FOUND)); + + return createApplyInfoDto(member,apply,dog,board); + + + } + //산책자 노원구 공릉동, 30대 초반 + private ApplyInfoDto createApplyInfoDto(Member member, Apply apply, Dog dog,Board board) { + return new ApplyInfoDto( + dog.getName(), + dog.getGender(), + dog.getBreed(), + dog.getDogSize(), + member.getName(), + member.getProfile(), + member.getGender(), + apply.getDongAddress(), + board.getStartTime(), + board.getEndTime(), + apply.getAddressDetail(), + apply.getMuzzleYn(), + apply.getPoopBagYn(), + apply.getPreMeetingYn(), + apply.getMemoToOwner() + ); + } } 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 d0ee707..c2885d6 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 @@ -13,6 +13,7 @@ import org.jullaene.walkmong_back.common.BaseEntity; @Table(name = "board") +@Getter @Entity @NoArgsConstructor @DynamicUpdate diff --git a/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java b/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java index 21055b3..fcf103f 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java +++ b/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java @@ -12,6 +12,7 @@ import org.jullaene.walkmong_back.common.enums.Gender; import org.jullaene.walkmong_back.common.BaseEntity; +@Getter @Table(name = "dog") @Entity @DynamicUpdate diff --git a/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java b/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java index 903632a..66d816d 100644 --- a/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java +++ b/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java @@ -12,6 +12,8 @@ public enum ErrorType { LOGIN_REQUIRED("로그인 해주세요."), EXPIRED_TOKEN("만료된 요청입니다."), ALREADY_EXIST_USER("이미 존재하는 유저입니다."), + ALREADY_EXIST_NICKNAME("이미 존재하는 닉네임입니다."), + INVALID_VERIFICATION_CODE("인증에 실패했습니다."), ALREADY_LOGIN("로그인 상태입니다"), WRONG_PASSWORD("잘못된 비밀번호 입니다."), REQUEST_VALIDATION_ERROR("유효성 검사가 실패하였습니다."), @@ -22,6 +24,9 @@ public enum ErrorType { INVALID_ADDRESS("유효하지 않은 주소입니다."), CANNOT_SELF_APPLY("본인의 게시글에는 지원할 수 없습니다."), CANNOT_DUPLICATED_APPLY("한 게시글에 여러 번 지원할 수 없습니다."), + CANNOT_DUPLICATED_DOG_PROFILE("이미 등록된 강아지입니다"), + APPLY_NOT_FOUND("존재하지 않는 지원입니다"), + POST_NOT_FOUND("존재하지 않는 산책글입니다") ; private String message; From 6ef3b5631611f051835e7904bb9d6c6951fa4624 Mon Sep 17 00:00:00 2001 From: dnwldla Date: Tue, 24 Dec 2024 11:31:10 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=EC=B5=9C=EC=A2=85=20=EB=A7=A4?= =?UTF-8?q?=EC=B9=AD=20=EB=82=B4=EC=97=AD=20=ED=99=95=EC=9D=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apply/domain/enums/MatchingStatus.java | 2 +- .../api/apply/repository/ApplyRepository.java | 2 ++ .../api/apply/rest/ApplyController.java | 3 -- .../api/apply/service/ApplyService.java | 29 +++++++++++-------- .../api/board/repository/BoardRepository.java | 3 +- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/enums/MatchingStatus.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/enums/MatchingStatus.java index bf0ca83..a95168b 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/enums/MatchingStatus.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/enums/MatchingStatus.java @@ -3,5 +3,5 @@ public enum MatchingStatus { PENDING, // 매칭 대기 중 CONFIRMED, // 매칭 확정 - REJECTED // 매칭 거절 + REJECTED // 매칭 거절 } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java index 8c3174e..2c300e4 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java @@ -1,10 +1,12 @@ package org.jullaene.walkmong_back.api.apply.repository; import org.jullaene.walkmong_back.api.apply.domain.Apply; +import org.jullaene.walkmong_back.api.apply.domain.enums.MatchingStatus; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface ApplyRepository extends JpaRepository { boolean existsByBoardIdAndMemberIdAndDelYn(Long boardId, Long memberId, String delYn); + boolean existsByBoardIdAndMemberIdAndMatchingStatusAndDelYn(Long boardId, Long memberId, MatchingStatus matchingStatus, String delYn); } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java index a56aa58..3157721 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/rest/ApplyController.java @@ -1,7 +1,6 @@ package org.jullaene.walkmong_back.api.apply.rest; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.api.apply.dto.res.ApplyInfoDto; import org.jullaene.walkmong_back.api.apply.service.ApplyService; @@ -9,7 +8,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -@Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/walking/apply") @@ -30,5 +28,4 @@ public ResponseEntity> getApplyInfo( ApplyInfoDto applyInfoDto=applyService.getApplyInfo(boardId); return ResponseEntity.ok(BasicResponse.ofSuccess(applyInfoDto)); } - } 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 e8ec904..f490915 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 @@ -1,8 +1,8 @@ package org.jullaene.walkmong_back.api.apply.service; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.jullaene.walkmong_back.api.apply.domain.Apply; +import org.jullaene.walkmong_back.api.apply.domain.enums.MatchingStatus; import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.api.apply.dto.res.ApplyInfoDto; import org.jullaene.walkmong_back.api.apply.repository.ApplyRepository; @@ -18,9 +18,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Optional; - -@Slf4j @Service @RequiredArgsConstructor public class ApplyService { @@ -30,7 +27,7 @@ public class ApplyService { private final MemberService memberService; @Transactional - public Long saveApply(Long boardId, ApplyRequestDto applyRequestDto){ + public Long saveApply(Long boardId, ApplyRequestDto applyRequestDto) { Member member = memberService.getMemberFromUserDetail(); // 본인이 쓴 게시글에는 지원 불가 @@ -49,7 +46,14 @@ public Long saveApply(Long boardId, ApplyRequestDto applyRequestDto){ .applyRequestDto(applyRequestDto) .build(); - return applyRepository.save(apply).getApplyId(); + return applyRepository.save(apply).getApplyId(); + } + + @Transactional(readOnly = true) + public void isValidWalkerByBoardIdAndMatchingStatus(Long memberId, Long boardId, MatchingStatus matchingStatus) { + if (!applyRepository.existsByBoardIdAndMemberIdAndMatchingStatusAndDelYn(boardId, memberId, matchingStatus, "N")) { + throw new CustomException(HttpStatus.UNAUTHORIZED, ErrorType.ACCESS_DENIED); + } } public ApplyInfoDto getApplyInfo(Long boardId) { @@ -57,21 +61,22 @@ public ApplyInfoDto getApplyInfo(Long boardId) { // 게시글 id로 지원 내역 찾기 Apply apply = applyRepository.findById(boardId) - .orElseThrow(() ->new CustomException(HttpStatus.NOT_FOUND,ErrorType.APPLY_NOT_FOUND)); + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.APPLY_NOT_FOUND)); // 게시글의 강아지 아이디 찾기 Board board = boardRepository.findById(boardId) - .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND,ErrorType.POST_NOT_FOUND)); + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.POST_NOT_FOUND)); Dog dog = dogRepository.findById(board.getDogId()) - .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND,ErrorType.DOG_NOT_FOUND)); + .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.DOG_NOT_FOUND)); - return createApplyInfoDto(member,apply,dog,board); + return createApplyInfoDto(member, apply, dog, board); } + //산책자 노원구 공릉동, 30대 초반 - private ApplyInfoDto createApplyInfoDto(Member member, Apply apply, Dog dog,Board board) { + private ApplyInfoDto createApplyInfoDto(Member member, Apply apply, Dog dog, Board board) { return new ApplyInfoDto( dog.getName(), dog.getGender(), @@ -90,4 +95,4 @@ private ApplyInfoDto createApplyInfoDto(Member member, Apply apply, Dog dog,Boar apply.getMemoToOwner() ); } -} +} \ No newline at end of file diff --git a/src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepository.java b/src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepository.java index b27a723..c4cb0b4 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepository.java +++ b/src/main/java/org/jullaene/walkmong_back/api/board/repository/BoardRepository.java @@ -5,5 +5,6 @@ import org.springframework.stereotype.Repository; @Repository -public interface BoardRepository extends JpaRepository { +public interface BoardRepository extends JpaRepository, BoardRepositoryCustom { + boolean existsByOwnerIdAndBoardIdAndDelYn(Long ownerId, Long boardId, String delYn); } From a46adfa256e1905ce5b3e1632cfce4d41dac979b Mon Sep 17 00:00:00 2001 From: dnwldla Date: Tue, 24 Dec 2024 16:06:26 +0900 Subject: [PATCH 13/14] =?UTF-8?q?feat:=20=EC=B5=9C=EC=A2=85=20=EB=A7=A4?= =?UTF-8?q?=EC=B9=AD=20=EB=82=B4=EC=97=AD=20=ED=99=95=EC=9D=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jullaene/walkmong_back/api/apply/service/ApplyService.java | 2 +- .../org/jullaene/walkmong_back/common/exception/ErrorType.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) 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 f490915..29b60b2 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 @@ -95,4 +95,4 @@ private ApplyInfoDto createApplyInfoDto(Member member, Apply apply, Dog dog, Boa apply.getMemoToOwner() ); } -} \ No newline at end of file +} diff --git a/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java b/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java index 66d816d..1816bc3 100644 --- a/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java +++ b/src/main/java/org/jullaene/walkmong_back/common/exception/ErrorType.java @@ -25,6 +25,8 @@ public enum ErrorType { CANNOT_SELF_APPLY("본인의 게시글에는 지원할 수 없습니다."), CANNOT_DUPLICATED_APPLY("한 게시글에 여러 번 지원할 수 없습니다."), CANNOT_DUPLICATED_DOG_PROFILE("이미 등록된 강아지입니다"), + INVALID_FILE("존재하지 않는 파일입니다."), + INVALID_S3_FILE("AWS S3 저장소에 존재하지 않는 파일입니다."), APPLY_NOT_FOUND("존재하지 않는 지원입니다"), POST_NOT_FOUND("존재하지 않는 산책글입니다") ; From 05752fdbc8b81486a3afabafd96874aa58757ee1 Mon Sep 17 00:00:00 2001 From: dnwldla Date: Tue, 24 Dec 2024 18:32:12 +0900 Subject: [PATCH 14/14] =?UTF-8?q?feat:=20=EC=B5=9C=EC=A2=85=20=EB=A7=A4?= =?UTF-8?q?=EC=B9=AD=20=EB=82=B4=EC=97=AD=20=ED=99=95=EC=9D=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../walkmong_back/api/apply/domain/Apply.java | 1 - .../api/apply/dto/res/ApplyInfoDto.java | 32 +++++----- .../api/apply/repository/ApplyRepository.java | 2 +- .../repository/ApplyRepositoryCustom.java | 7 +++ .../repository/impl/ApplyRepositoryImpl.java | 59 +++++++++++++++++++ .../api/apply/service/ApplyService.java | 39 +----------- .../walkmong_back/api/board/domain/Board.java | 1 - .../walkmong_back/api/dog/domain/Dog.java | 1 - 8 files changed, 87 insertions(+), 55 deletions(-) create mode 100644 src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepositoryCustom.java create mode 100644 src/main/java/org/jullaene/walkmong_back/api/apply/repository/impl/ApplyRepositoryImpl.java diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java index 4e029d1..c0914ef 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/domain/Apply.java @@ -11,7 +11,6 @@ import org.jullaene.walkmong_back.api.apply.dto.req.ApplyRequestDto; import org.jullaene.walkmong_back.common.BaseEntity; -@Getter @Table(name = "apply") @Entity @NoArgsConstructor diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java index 5205da7..834c8d8 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/dto/res/ApplyInfoDto.java @@ -1,5 +1,6 @@ package org.jullaene.walkmong_back.api.apply.dto.res; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.jullaene.walkmong_back.api.dog.domain.enums.DogSize; @@ -9,20 +10,21 @@ @Getter @RequiredArgsConstructor +@AllArgsConstructor public class ApplyInfoDto { - private final String dogName; - private final Gender dogGender; - private final String dogBreed; - private final DogSize dogSize; - private final String memberName; - private final String memberProfile; - private final Gender memberGender; - private final String dongAddress; - private final LocalDateTime boardStartTime; - private final LocalDateTime boardEndTime; - private final String addressDetail; - private final String muzzleYn; - private final String poopBagYn; - private final String preMeetingYn; - private final String memoToOwner; + private String dogName; + private Gender dogGender; + private String breed; + private DogSize dogSize; + private String ownerName; + private String memberProfile; + private Gender memberGender; + private String dongAddress; + private String addressDetail; + private String muzzleYn; + private String poopBagYn; + private String preMeetingYn; + private String memoToOwner; + private LocalDateTime startTime; + private LocalDateTime endTime; } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java index 2c300e4..6d2c872 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepository.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Repository; @Repository -public interface ApplyRepository extends JpaRepository { +public interface ApplyRepository extends JpaRepository ,ApplyRepositoryCustom{ boolean existsByBoardIdAndMemberIdAndDelYn(Long boardId, Long memberId, String delYn); boolean existsByBoardIdAndMemberIdAndMatchingStatusAndDelYn(Long boardId, Long memberId, MatchingStatus matchingStatus, String delYn); } diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepositoryCustom.java b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepositoryCustom.java new file mode 100644 index 0000000..d0d6ba5 --- /dev/null +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/ApplyRepositoryCustom.java @@ -0,0 +1,7 @@ +package org.jullaene.walkmong_back.api.apply.repository; +import org.jullaene.walkmong_back.api.apply.dto.res.ApplyInfoDto; +import java.util.Optional; + +public interface ApplyRepositoryCustom { + Optional getApplyInfoResponse(Long boardId, Long memberId, String delYn); +} diff --git a/src/main/java/org/jullaene/walkmong_back/api/apply/repository/impl/ApplyRepositoryImpl.java b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/impl/ApplyRepositoryImpl.java new file mode 100644 index 0000000..7b5a800 --- /dev/null +++ b/src/main/java/org/jullaene/walkmong_back/api/apply/repository/impl/ApplyRepositoryImpl.java @@ -0,0 +1,59 @@ +package org.jullaene.walkmong_back.api.apply.repository.impl; + +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jullaene.walkmong_back.api.apply.domain.QApply; +import org.jullaene.walkmong_back.api.apply.dto.res.ApplyInfoDto; +import org.jullaene.walkmong_back.api.apply.repository.ApplyRepository; +import org.jullaene.walkmong_back.api.apply.repository.ApplyRepositoryCustom; +import org.jullaene.walkmong_back.api.board.domain.QBoard; +import org.jullaene.walkmong_back.api.dog.domain.QDog; +import org.jullaene.walkmong_back.api.member.domain.QMember; + +import java.util.Optional; + +@RequiredArgsConstructor +@Slf4j +public class ApplyRepositoryImpl implements ApplyRepositoryCustom { + private final JPAQueryFactory queryFactory; + + //산책 지원 최종 내역 확인하기 + @Override + public Optional getApplyInfoResponse(Long boardId, Long memberId, String delYn) { + QDog dog= QDog.dog; + QMember member=QMember.member; + QBoard board=QBoard.board; + QApply apply= QApply.apply; + + Optional applyInfoDto= + Optional.ofNullable(queryFactory.selectDistinct( + Projections.constructor(ApplyInfoDto.class, + dog.name.as("dogName"), + dog.gender.as("dogGender"), + dog.breed.as("breed"), + dog.dogSize.as("dogSize"), + member.name.as("ownerName"), + member.profile.as("memberProfile"), + member.gender.as("memberGender"), + apply.dongAddress.as("dongAddress"), + apply.addressDetail.as("addressDetail"), + apply.muzzleYn.as("muzzleYn"), + apply.poopBagYn.as("poopBagYn"), + apply.preMeetingYn.as("preMeetingYn"), + apply.memoToOwner.as("memoToOwner"), + board.startTime.as("startTime"), + board.endTime.as("endTime") + )) + .from(board) + .leftJoin(dog).on(dog.dogId.eq(board.dogId)) + .leftJoin(member).on(dog.memberId.eq(member.memberId)) + .leftJoin(apply).on(apply.boardId.eq(boardId)) + .where(board.boardId.eq(boardId) + .and(board.delYn.eq(delYn))) + .fetchOne()); + + return applyInfoDto; + } +} 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 29b60b2..09abd06 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 @@ -56,43 +56,10 @@ public void isValidWalkerByBoardIdAndMatchingStatus(Long memberId, Long boardId, } } + @Transactional public ApplyInfoDto getApplyInfo(Long boardId) { Member member = memberService.getMemberFromUserDetail(); - - // 게시글 id로 지원 내역 찾기 - Apply apply = applyRepository.findById(boardId) - .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.APPLY_NOT_FOUND)); - - // 게시글의 강아지 아이디 찾기 - Board board = boardRepository.findById(boardId) - .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.POST_NOT_FOUND)); - - Dog dog = dogRepository.findById(board.getDogId()) - .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ErrorType.DOG_NOT_FOUND)); - - return createApplyInfoDto(member, apply, dog, board); - - - } - - //산책자 노원구 공릉동, 30대 초반 - private ApplyInfoDto createApplyInfoDto(Member member, Apply apply, Dog dog, Board board) { - return new ApplyInfoDto( - dog.getName(), - dog.getGender(), - dog.getBreed(), - dog.getDogSize(), - member.getName(), - member.getProfile(), - member.getGender(), - apply.getDongAddress(), - board.getStartTime(), - board.getEndTime(), - apply.getAddressDetail(), - apply.getMuzzleYn(), - apply.getPoopBagYn(), - apply.getPreMeetingYn(), - apply.getMemoToOwner() - ); + return applyRepository.getApplyInfoResponse(boardId,member.getMemberId(),"N") + .orElseThrow(()->new CustomException(HttpStatus.BAD_REQUEST,ErrorType.INVALID_ADDRESS)); } } 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 c2885d6..d0ee707 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 @@ -13,7 +13,6 @@ import org.jullaene.walkmong_back.common.BaseEntity; @Table(name = "board") -@Getter @Entity @NoArgsConstructor @DynamicUpdate diff --git a/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java b/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java index fcf103f..21055b3 100644 --- a/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java +++ b/src/main/java/org/jullaene/walkmong_back/api/dog/domain/Dog.java @@ -12,7 +12,6 @@ import org.jullaene.walkmong_back.common.enums.Gender; import org.jullaene.walkmong_back.common.BaseEntity; -@Getter @Table(name = "dog") @Entity @DynamicUpdate