From 7c303364f89e791bc69c7c9d9fffa661137f401d Mon Sep 17 00:00:00 2001 From: Lemonade255 Date: Mon, 20 Nov 2023 18:04:21 +0900 Subject: [PATCH 01/15] =?UTF-8?q?feat(BE):=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EB=A7=A4=EC=B9=AD=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20BUS-229-place-latitude-longitude=20#221?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/rest/MatchingController.java | 56 +++++++++++++++---- .../out/persistence/MatchingEntity.java | 6 ++ .../MatchingPersistenceAdapter.java | 5 ++ .../port/in/FindMatchingUsecase.java | 1 + .../port/out/FindMatchingPort.java | 1 + .../example/api/matching/domain/Matching.java | 2 + .../api/matching/dto/FindMatchingDto.java | 7 +++ .../api/matching/dto/SaveMatchingDto.java | 7 +++ .../repository/MatchingRepository.java | 1 + .../api/matching/service/MatchingService.java | 5 ++ 10 files changed, 80 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java index 9a1131f..5f7241b 100644 --- a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java +++ b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java @@ -11,7 +11,6 @@ import com.example.api.common.utils.AuthenticationUtils; import com.example.api.matching.adapter.out.persistence.MatchingMapperInterface; import com.example.api.matching.application.port.in.*; -import com.example.api.matching.domain.MatchingApplication; import com.example.api.matching.dto.*; import com.example.api.matching.type.MatchingTypeEnum; import com.example.api.member.application.port.in.AddMemberChatRoomUsecase; @@ -117,9 +116,7 @@ public void createMatchingApplication(@Valid @RequestBody SaveMatchingApplicatio throw new CustomException(ErrorCodeEnum.MATCHING_NOT_FOUND); } - MatchingApplication matchingApplication = matchingApplicationUsecase.createMatchingApplicationData(securityUser.getUserId(), matchingApplicationDto); - //ChatRoom chatRoom = createChatRoomUsecase.createMatchingChatRoom(matchingApplication); - //return addMemberChatRoomUsecase.setupMatchingChatRoom(matchingApplication, chatRoom); + matchingApplicationUsecase.createMatchingApplicationData(securityUser.getUserId(), matchingApplicationDto); } /** @@ -136,7 +133,11 @@ public List getAll() { } return findMatchingUsecase.getAll(); } - + + /** + * 식사 매칭 목록 조회 + * @return dining matching list + */ @Operation(summary = "Get all dining matching", description = "모든 식사 매칭 목록을 조회한다.") @GetMapping("/diningmatching") public List getDiningMatchingList() { @@ -186,16 +187,36 @@ public AccommodationMatchingDto getMatchingById(@PathVariable Long matchingId) { return matchingDto; } - @Operation(summary = "Get matching", description = "자기 자신의 매칭을 조회한다.") + /** + * 로그인한 사용자가 작성한 매칭 조회 + * @return own matching + */ + @Operation(summary = "Get own matching", description = "자기 자신의 매칭을 조회한다.") @GetMapping("/matching/my-matching") public List getMyMatching() { SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); if (securityUser == null) { - log.error("MatchingController::getMatchingById: Login is needed"); + log.error("MatchingController::getMyMatching: Login is needed"); throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); } return findMatchingUsecase.getMatchingByWriterId(securityUser.getUserId()); -// return findMatchingUsecase.getMatchingById(matchingId); + } + + /** + * 선택한 위치와 가까운 매칭 조회 + * @param latitude (위도) + * @param longitude (경도) + * @return near matching list + */ + @Operation(summary = "Get matching by place coordinate", description = "선택한 위치와 가까운 여행지의 매칭 목록을 조회한다.") + @GetMapping("/matching/nearfrom") + public List getNearMatching(Double latitude, Double longitude) { + SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); + if (securityUser == null) { + log.error("MatchingController::getNearMatching: Login is needed"); + throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); + } + return findMatchingUsecase.getNearMatching(latitude, longitude); } /** @@ -262,7 +283,11 @@ public int getLikeCount(@PathVariable Long matchingId) { } return likeUsecase.getLikeCount(matchingId); } - + + /** + * 추천 숙소 리스트 조회 + * @return recommended accommodation list + */ @Operation(summary = "Get recommended accommodation list", description = "추천 숙소 리스트를 반환한다.") @GetMapping("/accommodation/recommended") public List getRecommendedAccommodationList() { @@ -290,7 +315,12 @@ public FindMatchingDto updateMatching(@PathVariable Long matchingId, @RequestBod } return saveMatchingUsecase.updateMatching(matchingId, matchingDto); } - + + /** + * 숙소 정보 수정 + * @param matchingId (ID) + * @param accommodationDto (데이터) + */ @Operation(summary = "Update accommodation", description = "숙소 정보를 수정한다.") @PutMapping("/matching/{matchingId}/accommodation") public void updateAccommodation(@PathVariable Long matchingId, @RequestBody AccommodationDto accommodationDto) { @@ -374,7 +404,11 @@ public void deleteMatching(@PathVariable Long matchingId) { } deleteMatchingUsecase.deleteMatching(matchingId); } - + + /** + * 숙소 정보 초기화 + * @param matchingId (ID) + */ @Operation(summary = "Reset accommodation", description = "숙소 정보를 초기화한다.") @DeleteMapping("/matching/{matchingId}/accommodation") public void deleteAccommodation(@PathVariable Long matchingId) { diff --git a/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingEntity.java b/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingEntity.java index 59dcadc..171ae64 100644 --- a/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingEntity.java +++ b/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingEntity.java @@ -38,6 +38,12 @@ public class MatchingEntity extends BaseEntity { @Column(nullable = false, length = 3000) private String place; + @Column + private Double latitude; + + @Column + private Double longitude; + @Column(nullable = false, length = 6000) private String content; diff --git a/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingPersistenceAdapter.java b/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingPersistenceAdapter.java index f7dbef6..1e3bea4 100644 --- a/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingPersistenceAdapter.java +++ b/src/main/java/com/example/api/matching/adapter/out/persistence/MatchingPersistenceAdapter.java @@ -47,6 +47,11 @@ public List getByWriterId(UUID userId) { return matchingRepository.getByWriterId(userId); } + @Override + public List getByPlaceCoordinate(Double latitude, Double longitude) { + return matchingRepository.getByLatitudeGreaterThanEqualAndLatitudeLessThanEqualAndLongitudeGreaterThanEqualAndLongitudeLessThanEqual(latitude - 0.02, latitude + 0.02, longitude - 0.025, longitude + 0.025); + } + @Override public List getByIsActive(Boolean isActive) { return matchingRepository.getByIsActive(isActive); diff --git a/src/main/java/com/example/api/matching/application/port/in/FindMatchingUsecase.java b/src/main/java/com/example/api/matching/application/port/in/FindMatchingUsecase.java index a129721..88bcf79 100644 --- a/src/main/java/com/example/api/matching/application/port/in/FindMatchingUsecase.java +++ b/src/main/java/com/example/api/matching/application/port/in/FindMatchingUsecase.java @@ -10,6 +10,7 @@ public interface FindMatchingUsecase { List getDiningMatchingList(); FindMatchingDto getMatchingById(Long matchingId); List getMatchingByWriterId(UUID userId); + List getNearMatching(Double latitude, Double longitude); List getMatchingByIsActive(Boolean isActive); List getRecommendedMatchingList(UUID userId); } \ No newline at end of file diff --git a/src/main/java/com/example/api/matching/application/port/out/FindMatchingPort.java b/src/main/java/com/example/api/matching/application/port/out/FindMatchingPort.java index 19d8122..851f377 100644 --- a/src/main/java/com/example/api/matching/application/port/out/FindMatchingPort.java +++ b/src/main/java/com/example/api/matching/application/port/out/FindMatchingPort.java @@ -11,5 +11,6 @@ public interface FindMatchingPort { List getDiningMatchingList(); Optional getByMatchingId(Long matchingId); List getByWriterId(UUID userId); + List getByPlaceCoordinate(Double latitude, Double longitude); List getByIsActive(Boolean isActive); } \ No newline at end of file diff --git a/src/main/java/com/example/api/matching/domain/Matching.java b/src/main/java/com/example/api/matching/domain/Matching.java index 1cd09b6..5f05e70 100644 --- a/src/main/java/com/example/api/matching/domain/Matching.java +++ b/src/main/java/com/example/api/matching/domain/Matching.java @@ -18,6 +18,8 @@ public class Matching { private MatchingTypeEnum type; private String title; private String place; + private Double latitude; + private Double longitude; private String content; private LocalDateTime startDate; private LocalDateTime endDate; diff --git a/src/main/java/com/example/api/matching/dto/FindMatchingDto.java b/src/main/java/com/example/api/matching/dto/FindMatchingDto.java index d8479fc..820488c 100644 --- a/src/main/java/com/example/api/matching/dto/FindMatchingDto.java +++ b/src/main/java/com/example/api/matching/dto/FindMatchingDto.java @@ -4,6 +4,7 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.*; import java.time.LocalDateTime; @@ -33,6 +34,12 @@ public class FindMatchingDto { @NotBlank private String place; + + @Size(min = -90, max = 90) + private Double latitude; + + @Size(min = -180, max = 180) + private Double longitude; @NotBlank private String content; diff --git a/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java b/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java index f743328..bcfd120 100644 --- a/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java +++ b/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java @@ -4,6 +4,7 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.*; import java.time.LocalDateTime; @@ -27,6 +28,12 @@ public class SaveMatchingDto { @NotBlank(message = "Place is empty") private String place; + @Size(min = -90, max = 90) + private Double latitude; + + @Size(min = -180, max = 180) + private Double longitude; + @NotNull private String content; diff --git a/src/main/java/com/example/api/matching/repository/MatchingRepository.java b/src/main/java/com/example/api/matching/repository/MatchingRepository.java index 291e55c..b77a5ae 100644 --- a/src/main/java/com/example/api/matching/repository/MatchingRepository.java +++ b/src/main/java/com/example/api/matching/repository/MatchingRepository.java @@ -12,6 +12,7 @@ public interface MatchingRepository extends JpaRepository List getAllBy(); Optional getByMatchingId(Long matchingId); List getByWriterId(UUID userId); + List getByLatitudeGreaterThanEqualAndLatitudeLessThanEqualAndLongitudeGreaterThanEqualAndLongitudeLessThanEqual(Double minLatitude, Double maxLatitude, Double minLongitude, Double maxLongitude); List getByType(MatchingTypeEnum type); List getByIsActive(Boolean isActive); void deleteAllBy(); diff --git a/src/main/java/com/example/api/matching/service/MatchingService.java b/src/main/java/com/example/api/matching/service/MatchingService.java index 19ea2e4..168c681 100644 --- a/src/main/java/com/example/api/matching/service/MatchingService.java +++ b/src/main/java/com/example/api/matching/service/MatchingService.java @@ -84,6 +84,11 @@ public FindMatchingDto getMatchingById(Long matchingId) { public List getMatchingByWriterId(UUID userId) { return this.setCurrentMember(findMatchingPort.getByWriterId(userId)); } + + @Override + public List getNearMatching(Double latitude, Double longitude) { + return this.setCurrentMember(findMatchingPort.getByPlaceCoordinate(latitude, longitude)); + } @Override public List getMatchingByIsActive(Boolean isActive) { From 287ccfff31efd8a0dfb56aed2a5ffffd4f4f8881 Mon Sep 17 00:00:00 2001 From: Lemonade255 Date: Mon, 20 Nov 2023 18:18:01 +0900 Subject: [PATCH 02/15] =?UTF-8?q?feat(BE):=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EB=A7=A4=EC=B9=AD=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20BUS-229-place-latitude-longitude=20#221?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/matching/adapter/in/rest/MatchingController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java index 5f7241b..f5d47b9 100644 --- a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java +++ b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java @@ -8,6 +8,7 @@ import com.example.api.common.exception.CustomException; import com.example.api.common.type.ApplicationStateEnum; import com.example.api.common.type.ErrorCodeEnum; +import com.example.api.common.type.Pair; import com.example.api.common.utils.AuthenticationUtils; import com.example.api.matching.adapter.out.persistence.MatchingMapperInterface; import com.example.api.matching.application.port.in.*; @@ -204,19 +205,18 @@ public List getMyMatching() { /** * 선택한 위치와 가까운 매칭 조회 - * @param latitude (위도) - * @param longitude (경도) + * @param coordination (위치) * @return near matching list */ @Operation(summary = "Get matching by place coordinate", description = "선택한 위치와 가까운 여행지의 매칭 목록을 조회한다.") @GetMapping("/matching/nearfrom") - public List getNearMatching(Double latitude, Double longitude) { + public List getNearMatching(@RequestBody Pair coordination) { SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); if (securityUser == null) { log.error("MatchingController::getNearMatching: Login is needed"); throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); } - return findMatchingUsecase.getNearMatching(latitude, longitude); + return findMatchingUsecase.getNearMatching(coordination.getFirst(), coordination.getSecond()); } /** From e13cee125d39040160ec44517b30a05bc9deff91 Mon Sep 17 00:00:00 2001 From: Lemonade255 Date: Mon, 20 Nov 2023 20:01:07 +0900 Subject: [PATCH 03/15] =?UTF-8?q?feat(BE):=20=EB=94=94=ED=8F=B4=ED=8A=B8?= =?UTF-8?q?=20=EC=9C=84=EC=B9=98=20=EC=B6=94=EA=B0=80=20BUS-229-place-lati?= =?UTF-8?q?tude-longitude=20#221?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/matching/adapter/in/rest/MatchingController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java index f5d47b9..5341379 100644 --- a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java +++ b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java @@ -210,13 +210,17 @@ public List getMyMatching() { */ @Operation(summary = "Get matching by place coordinate", description = "선택한 위치와 가까운 여행지의 매칭 목록을 조회한다.") @GetMapping("/matching/nearfrom") - public List getNearMatching(@RequestBody Pair coordination) { + public List getNearMatching(@RequestBody(required = false) Pair coordination) { SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); if (securityUser == null) { log.error("MatchingController::getNearMatching: Login is needed"); throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); } - return findMatchingUsecase.getNearMatching(coordination.getFirst(), coordination.getSecond()); + Pair coordinationData = coordination; + if (coordinationData == null) { + coordinationData = new Pair<>(37.5544, 126.9707); // 서울역 + } + return findMatchingUsecase.getNearMatching(coordinationData.getFirst(), coordinationData.getSecond()); } /** From faccb1ff6dc295da24697b9dd00ff9cbac3c59ed Mon Sep 17 00:00:00 2001 From: Lemonade255 Date: Tue, 21 Nov 2023 15:14:18 +0900 Subject: [PATCH 04/15] =?UTF-8?q?feat(BE):=20=EB=A7=A4=EC=B9=AD=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=20=EC=83=9D=EC=84=B1/=EC=88=98=EB=9D=BD/?= =?UTF-8?q?=EA=B1=B0=EC=A0=88=20=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20BUS-230-matching-application-notification=20#225?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MatchingApplicationService.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/api/matching/service/MatchingApplicationService.java b/src/main/java/com/example/api/matching/service/MatchingApplicationService.java index a7c4007..f66f4d3 100644 --- a/src/main/java/com/example/api/matching/service/MatchingApplicationService.java +++ b/src/main/java/com/example/api/matching/service/MatchingApplicationService.java @@ -17,6 +17,13 @@ import com.example.api.matching.dto.FindMatchingDto; import com.example.api.matching.dto.SaveMatchingApplicationDto; import com.example.api.member.service.MemberService; +import com.example.api.notification.adapter.out.persistence.NotificationMapperInterface; +import com.example.api.notification.application.port.out.SaveNotificationPort; +import com.example.api.notification.application.port.out.UserNotificationPort; +import com.example.api.notification.domain.Notification; +import com.example.api.notification.dto.SaveNotificationDto; +import com.example.api.notification.dto.UserNotificationDto; +import com.example.api.notification.type.NotificationTypeEnum; import com.example.api.user.adapter.out.persistence.UserEntity; import com.example.api.user.adapter.out.persistence.UserMapperInterface; import com.example.api.user.application.port.out.FindUserPort; @@ -33,11 +40,14 @@ @Slf4j @Transactional(readOnly = true) public class MatchingApplicationService implements MatchingApplicationUsecase { - private final UserMapperInterface userMapper; - private final MatchingMapperInterface matchingMapper; private final FindUserPort findUserPort; private final FindMatchingPort findMatchingPort; private final MatchingApplicationPort matchingApplicationPort; + private final SaveNotificationPort saveNotificationPort; + private final UserNotificationPort userNotificationPort; + private final UserMapperInterface userMapper; + private final MatchingMapperInterface matchingMapper; + private final NotificationMapperInterface notificationMapper; private final MemberService memberService; private final FcmService fcmService; @@ -139,6 +149,21 @@ public void processMatchingApplication(SaveMatchingApplicationDto matchingApplic memberService.addMember(matchingEntity.getChatRoomId(), matchingApplication.getUserId()); } + // 알림 추가 + SaveNotificationDto saveNotificationDto = SaveNotificationDto.builder() + .type(state.equals(ApplicationStateEnum.Approved) ? NotificationTypeEnum.ApplicationApproved : NotificationTypeEnum.ApplicationDeclined) + .content(state.equals(ApplicationStateEnum.Approved) ? "매칭 신청이 수락되었어요!" : "매칭 신청이 거절되었어요.") + .isActive(true) + .build(); + Notification notification = saveNotificationPort.createNotification(notificationMapper.toDomain(saveNotificationDto)); + UserNotificationDto userNotificationDto = UserNotificationDto.builder() + .userId(matchingApplicationDto.getUserId()) + .notificationId(notification.getNotificationId()) + .isRead(false) + .readAt(null) + .build(); + userNotificationPort.createUserNotification(notificationMapper.toEntity(userNotificationDto)); + // 푸시 알림 전송 FcmDto fcmDto = FcmDto.builder() .userId(matchingApplication.getUserId()) From cd5646f02bb5a3977c1a0ecfb5ed22fea34671de Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 03:24:02 +0900 Subject: [PATCH 05/15] =?UTF-8?q?hotfix(BE):=20=EC=B1=84=ED=8C=85=EB=B0=A9?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EC=8B=9C=20=EC=83=9D=EA=B8=B0=EB=8A=94=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/rest/ChatRoomController.java | 10 ++++------ .../api/chatroom/dto/CreateChatRoomDto.java | 8 ++++++-- .../friend/adapter/in/rest/FriendController.java | 15 +++++++++++++++ .../com/example/api/friend/dto/FriendDto.java | 2 +- .../com/example/api/member/dto/AddMemberDto.java | 4 ++++ 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/example/api/chatroom/adapter/in/rest/ChatRoomController.java b/src/main/java/com/example/api/chatroom/adapter/in/rest/ChatRoomController.java index 82c0346..45d1cee 100644 --- a/src/main/java/com/example/api/chatroom/adapter/in/rest/ChatRoomController.java +++ b/src/main/java/com/example/api/chatroom/adapter/in/rest/ChatRoomController.java @@ -37,11 +37,14 @@ public class ChatRoomController { @Operation(summary = "Create chatroom", description = "새로운 채팅방을 생성한다.") @PostMapping("/chatroom") public UUID createChatroom(@RequestBody @Valid CreateChatRoomDto createChatRoomDto) { + SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); if (securityUser == null) { log.error("ChatRoomController::createChatroom: Login is needed"); throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); } + + createChatRoomDto.setMasterId(securityUser.getUserId()); ChatRoom chatRoom = createChatRoomUsecase.createRoom(createChatRoomDto); return chatRoom.getChatroomId(); } @@ -64,12 +67,7 @@ public List chatRoomList(@PageableDefault(sort = "createdAt", directio @Operation(summary = "Delete chatroom", description = "채팅방을 삭제한다.") @DeleteMapping("/chatroom/{chatRoomId}") - public void outChatRoom(@PathVariable UUID chatRoomId) { - SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); - if (securityUser == null) { - log.error("ChatRoomController::outChatroom: Login is needed"); - throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); - } + public void outChatRoom(@PathVariable UUID chatRoomId){ log.info("chatroom = {}", chatRoomId); } } \ No newline at end of file diff --git a/src/main/java/com/example/api/chatroom/dto/CreateChatRoomDto.java b/src/main/java/com/example/api/chatroom/dto/CreateChatRoomDto.java index f34b2b7..4d5ef24 100644 --- a/src/main/java/com/example/api/chatroom/dto/CreateChatRoomDto.java +++ b/src/main/java/com/example/api/chatroom/dto/CreateChatRoomDto.java @@ -3,16 +3,20 @@ import com.example.api.chatroom.type.ChatRoomEnum; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.UUID; @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class CreateChatRoomDto { - @NotNull - private UUID masterId; // TODO 추후 jwt에서 얻을 수 있어 삭제 가능 +// @NotNull + private UUID masterId; @NotBlank private String chatroomName; diff --git a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java index ed98fc1..943b208 100644 --- a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java +++ b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java @@ -13,9 +13,11 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.UUID; @RestController @RequiredArgsConstructor @@ -71,4 +73,17 @@ public void deleteFriend(FriendDto friendDto) { } deleteFriendUsecase.deleteFriend(friendDto); } + + @Operation(summary = "check friend", description = "친구 여부 확인") + @GetMapping("/friend/{friendId}") + public ResponseEntity findFriend(@PathVariable UUID friendId){ + SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); + if (securityUser == null) { + log.error("FriendController::findFriend: Login is needed"); + throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); + } + + return ResponseEntity.ok("yes"); + + } } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/dto/FriendDto.java b/src/main/java/com/example/api/friend/dto/FriendDto.java index 4915eb1..b7fbfa4 100644 --- a/src/main/java/com/example/api/friend/dto/FriendDto.java +++ b/src/main/java/com/example/api/friend/dto/FriendDto.java @@ -12,7 +12,7 @@ @NoArgsConstructor @AllArgsConstructor public class FriendDto { - @NotNull +// @NotNull private UUID userId; @NotNull diff --git a/src/main/java/com/example/api/member/dto/AddMemberDto.java b/src/main/java/com/example/api/member/dto/AddMemberDto.java index 4907525..ecee369 100644 --- a/src/main/java/com/example/api/member/dto/AddMemberDto.java +++ b/src/main/java/com/example/api/member/dto/AddMemberDto.java @@ -1,14 +1,18 @@ package com.example.api.member.dto; import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; import java.util.UUID; @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class AddMemberDto { @NotNull private UUID chatroomId; From da0812caf4558a4a22d9b9b1bfcb21e63187f739 Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 03:45:53 +0900 Subject: [PATCH 06/15] =?UTF-8?q?hotfix(BE):=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=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 --- .../api/friend/adapter/in/rest/FriendController.java | 6 +++--- .../out/persistence/FriendPersistenceAdapter.java | 6 ++++++ .../friend/application/port/in/FindFriendUsecase.java | 1 + .../api/friend/application/port/out/FindFriendPort.java | 3 +++ .../example/api/friend/repository/FriendRepository.java | 3 +++ .../com/example/api/friend/service/FriendService.java | 9 ++++++++- 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java index 943b208..6f74cfc 100644 --- a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java +++ b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java @@ -76,14 +76,14 @@ public void deleteFriend(FriendDto friendDto) { @Operation(summary = "check friend", description = "친구 여부 확인") @GetMapping("/friend/{friendId}") - public ResponseEntity findFriend(@PathVariable UUID friendId){ + public ResponseEntity findFriend(@PathVariable UUID friendId){ SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); if (securityUser == null) { log.error("FriendController::findFriend: Login is needed"); throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); } - - return ResponseEntity.ok("yes"); + Boolean res = findFriendUsecase.findFriend(securityUser.getUserId(), friendId); + return ResponseEntity.ok(res); } } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPersistenceAdapter.java b/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPersistenceAdapter.java index 5faf4c8..38a27a5 100644 --- a/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPersistenceAdapter.java +++ b/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPersistenceAdapter.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; import java.util.UUID; @Repository @@ -34,4 +35,9 @@ public List getFriendList(UUID userId) { public void deleteFriend(Friend friend) { friendRepository.delete(friendMapper.toEntity(friend)); } + + @Override + public Optional findFriend(UUID userId, UUID friendId) { + return friendRepository.getByUserIdAndFriendId(userId, friendId); + } } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/application/port/in/FindFriendUsecase.java b/src/main/java/com/example/api/friend/application/port/in/FindFriendUsecase.java index 0676932..141dde6 100644 --- a/src/main/java/com/example/api/friend/application/port/in/FindFriendUsecase.java +++ b/src/main/java/com/example/api/friend/application/port/in/FindFriendUsecase.java @@ -7,4 +7,5 @@ public interface FindFriendUsecase { List getFriendList(UUID userId); + Boolean findFriend(UUID userId, UUID friendId); } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/application/port/out/FindFriendPort.java b/src/main/java/com/example/api/friend/application/port/out/FindFriendPort.java index a78fcbd..6903068 100644 --- a/src/main/java/com/example/api/friend/application/port/out/FindFriendPort.java +++ b/src/main/java/com/example/api/friend/application/port/out/FindFriendPort.java @@ -4,9 +4,12 @@ import org.springframework.stereotype.Component; import java.util.List; +import java.util.Optional; import java.util.UUID; @Component public interface FindFriendPort { List getFriendList(UUID userId); + + Optional findFriend(UUID userId, UUID friendId); } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/repository/FriendRepository.java b/src/main/java/com/example/api/friend/repository/FriendRepository.java index dc07180..7183b6e 100644 --- a/src/main/java/com/example/api/friend/repository/FriendRepository.java +++ b/src/main/java/com/example/api/friend/repository/FriendRepository.java @@ -5,8 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; +import java.util.Optional; import java.util.UUID; public interface FriendRepository extends JpaRepository { List getByUserId(UUID userId); + + Optional getByUserIdAndFriendId(UUID userId, UUID friendId); } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/service/FriendService.java b/src/main/java/com/example/api/friend/service/FriendService.java index 073b7df..376c2c8 100644 --- a/src/main/java/com/example/api/friend/service/FriendService.java +++ b/src/main/java/com/example/api/friend/service/FriendService.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.UUID; @Service @@ -40,7 +41,13 @@ public FriendDto addFriend(FriendDto friendDto) { Friend friend = addFriendPort.addFriend(friendMapper.toDomain(friendDto)); return friendMapper.toDto(friend); } - + + @Override + public Boolean findFriend(UUID userId, UUID friendId) { + Optional friend = findFriendPort.findFriend(userId,friendId); + return friend.isPresent(); + } + @Override public List getFriendList(UUID userId) { List friendList = new ArrayList<>(); From 116661fccaea3213e4f6dd9a04901cfb19415bc1 Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 18:26:38 +0900 Subject: [PATCH 07/15] =?UTF-8?q?hotfix(BE):=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EC=82=AC=EC=A7=84=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EA=B8=B0=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/user/adapter/in/rest/UserController.java | 13 +++++++++++++ .../java/com/example/api/user/dto/FindUserDto.java | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/main/java/com/example/api/user/adapter/in/rest/UserController.java b/src/main/java/com/example/api/user/adapter/in/rest/UserController.java index b8be059..cbd109d 100644 --- a/src/main/java/com/example/api/user/adapter/in/rest/UserController.java +++ b/src/main/java/com/example/api/user/adapter/in/rest/UserController.java @@ -230,6 +230,19 @@ public ResponseEntity getProfileImage() { .body(new InputStreamResource(fileStream)); } + @Operation(summary = "Get user profile image", description = "사용자의 프로필 이미지를 불러온다.") + @GetMapping("/user/image/{userId}") + public ResponseEntity getProfileUserImage(@PathVariable UUID userId) { + String filename = profileImageUsecase.getProfileImageName(userId); + if (filename == null) { + return null; + } + InputStream fileStream = fileDisplayUsecase.display(filename); + return ResponseEntity.ok() + .contentType(MediaType.IMAGE_PNG) + .body(new InputStreamResource(fileStream)); + } + /** * 현재 로그인한 사용자 정보 수정 * @param userDto (데이터) diff --git a/src/main/java/com/example/api/user/dto/FindUserDto.java b/src/main/java/com/example/api/user/dto/FindUserDto.java index e76e4e3..bbf74ee 100644 --- a/src/main/java/com/example/api/user/dto/FindUserDto.java +++ b/src/main/java/com/example/api/user/dto/FindUserDto.java @@ -6,6 +6,7 @@ import lombok.*; import java.time.LocalDateTime; +import java.util.UUID; @Getter @Builder @@ -13,6 +14,7 @@ @NoArgsConstructor @AllArgsConstructor public class FindUserDto { + private UUID userId; @NotBlank private String username; From 3351cfe5b0d972b57633b99305f2510ad7bc00c7 Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 18:42:20 +0900 Subject: [PATCH 08/15] =?UTF-8?q?hotfix(BE):=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=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 --- .../com/example/api/friend/adapter/in/rest/FriendController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java index 6f74cfc..aac1451 100644 --- a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java +++ b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java @@ -41,6 +41,7 @@ public FriendDto addFriend(@RequestBody FriendDto friendDto) { log.error("FriendController::addFriend: Login is needed"); throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); } + friendDto.setFriendId(securityUser.getUserId()); return addFriendUsecase.addFriend(friendDto); } From 6079c0147d65700a0affd1e610c591d15e596fd4 Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 19:24:03 +0900 Subject: [PATCH 09/15] =?UTF-8?q?hotfix(BE):=20validator=20=EC=95=A0?= =?UTF-8?q?=EB=9F=AC=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/api/matching/dto/SaveMatchingDto.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java b/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java index bcfd120..5c9862f 100644 --- a/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java +++ b/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java @@ -28,10 +28,10 @@ public class SaveMatchingDto { @NotBlank(message = "Place is empty") private String place; - @Size(min = -90, max = 90) +// @Size(min = -90, max = 90) private Double latitude; - @Size(min = -180, max = 180) +// @Size(min = -180, max = 180) private Double longitude; @NotNull From fc0100f2c0a1877244e1e855edb49b11841f9a19 Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 20:13:11 +0900 Subject: [PATCH 10/15] =?UTF-8?q?hotfix(BE):=20=EC=B9=9C=EA=B5=AC=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/api/friend/adapter/in/rest/FriendController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java index aac1451..3cc71ef 100644 --- a/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java +++ b/src/main/java/com/example/api/friend/adapter/in/rest/FriendController.java @@ -41,7 +41,7 @@ public FriendDto addFriend(@RequestBody FriendDto friendDto) { log.error("FriendController::addFriend: Login is needed"); throw new CustomException(ErrorCodeEnum.LOGIN_IS_NOT_DONE); } - friendDto.setFriendId(securityUser.getUserId()); + friendDto.setUserId(securityUser.getUserId()); return addFriendUsecase.addFriend(friendDto); } From c40a881b1aa2453689cce518333f487bc5e8aa67 Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 20:20:10 +0900 Subject: [PATCH 11/15] =?UTF-8?q?hotfix(BE):=20=EC=B9=9C=EA=B5=AC=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/api/friend/adapter/out/persistence/FriendPK.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPK.java b/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPK.java index 86808a0..caf66a9 100644 --- a/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPK.java +++ b/src/main/java/com/example/api/friend/adapter/out/persistence/FriendPK.java @@ -2,12 +2,14 @@ import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.UUID; @Data @AllArgsConstructor +@NoArgsConstructor public class FriendPK implements Serializable { private UUID userId; private UUID friendId; From fc7df82e5fa2aae82d3d01a7bbe68686ea0ac9ec Mon Sep 17 00:00:00 2001 From: namhyo01 Date: Wed, 22 Nov 2023 20:34:19 +0900 Subject: [PATCH 12/15] =?UTF-8?q?hotfix(BE):=20=EC=B9=9C=EA=B5=AC=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/api/friend/service/FriendService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/api/friend/service/FriendService.java b/src/main/java/com/example/api/friend/service/FriendService.java index 376c2c8..db5394c 100644 --- a/src/main/java/com/example/api/friend/service/FriendService.java +++ b/src/main/java/com/example/api/friend/service/FriendService.java @@ -53,7 +53,7 @@ public List getFriendList(UUID userId) { List friendList = new ArrayList<>(); List friendPairList = findFriendPort.getFriendList(userId); for (FriendEntity friendPair: friendPairList) { - friendList.add(userMapper.toDto(findUserPort.getByUserId(friendPair.getUserId()).orElseThrow())); + friendList.add(userMapper.toDto(findUserPort.getByUserId(friendPair.getFriendId()).orElseThrow())); } return friendList; } From 41f392d4b5cedc3cb1f7591c938e4028f588bd2e Mon Sep 17 00:00:00 2001 From: Lemonade255 Date: Wed, 22 Nov 2023 21:20:23 +0900 Subject: [PATCH 13/15] =?UTF-8?q?hotfix(BE):=20=EC=88=99=EC=86=8C=20?= =?UTF-8?q?=EB=A7=A4=EC=B9=AD=20=EB=93=B1=EB=A1=9D=20=EC=95=88=EB=90=A8=20?= =?UTF-8?q?BUS-225-MVP2-API-test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../matching/adapter/in/rest/MatchingController.java | 12 +++++++----- .../example/api/matching/dto/SaveMatchingDto.java | 8 ++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java index 5341379..48769e6 100644 --- a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java +++ b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java @@ -55,7 +55,7 @@ public class MatchingController { */ @Operation(summary = "Create matching", description = "새로운 매칭을 생성한다.") @PostMapping("/matching") - public FindMatchingDto createMatching(@Valid @RequestBody SaveMatchingDto saveMatchingDto, @Valid @RequestBody(required = false) AccommodationDto accommodationDto) { + public FindMatchingDto createMatching(@Valid @RequestBody SaveMatchingDto saveMatchingDto) { SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); if (securityUser == null) { log.error("MatchingController::createMatching: Login is needed"); @@ -86,10 +86,12 @@ public FindMatchingDto createMatching(@Valid @RequestBody SaveMatchingDto saveMa matchingApplicationUsecase.createMatchingApplicationData(securityUser.getUserId(), saveMatchingApplicationDto); if (saveMatchingDto.getType().equals(MatchingTypeEnum.Accommodation)) { - if (accommodationDto == null) { - log.error("MatchingController::createMatching: Accommodation data not found"); - throw new CustomException(ErrorCodeEnum.ACCOMMODATION_NOT_FOUND); - } + AccommodationDto accommodationDto = AccommodationDto.builder() + .matchingId(findMatchingDto.getMatchingId()) + .price(saveMatchingDto.getPrice()) + .pricePerOne(saveMatchingDto.getPricePerOne()) + .room(saveMatchingDto.getRoom()) + .build(); accommodationUsecase.createAccommodation(findMatchingDto.getMatchingId(), accommodationDto); } return findMatchingDto; diff --git a/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java b/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java index 5c9862f..7ea3f39 100644 --- a/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java +++ b/src/main/java/com/example/api/matching/dto/SaveMatchingDto.java @@ -55,6 +55,14 @@ public class SaveMatchingDto { @Min(0) private Integer plusAge; +// @Min(0) + private Integer price; + +// @Min(0) + private Integer pricePerOne; + + private String room; + @NotNull @Min(0) private Integer readCount; From 06085b1d5e7b8cc67962c85777ce4f6ffb75ae1b Mon Sep 17 00:00:00 2001 From: Lemonade255 Date: Wed, 22 Nov 2023 21:50:46 +0900 Subject: [PATCH 14/15] =?UTF-8?q?hotfix(BE):=20=EC=88=99=EC=86=8C=20?= =?UTF-8?q?=EB=A7=A4=EC=B9=AD=20=EC=A1=B0=ED=9A=8C=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?BUS-225-MVP2-API-test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../matching/adapter/in/rest/MatchingController.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java index 48769e6..76a6705 100644 --- a/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java +++ b/src/main/java/com/example/api/matching/adapter/in/rest/MatchingController.java @@ -183,9 +183,13 @@ public AccommodationMatchingDto getMatchingById(@PathVariable Long matchingId) { AccommodationMatchingDto matchingDto = matchingMapper.toDto(findMatchingUsecase.getMatchingById(matchingId)); if (matchingDto.getType().equals(MatchingTypeEnum.Accommodation)) { AccommodationDto accommodationDto = accommodationUsecase.getAccommodation(matchingId); - matchingDto.setPrice(accommodationDto.getPrice()); - matchingDto.setPricePerOne(accommodationDto.getPrice() / Math.max(matchingDto.getCurrentMember(), 1)); - matchingDto.setRoom(accommodationDto.getRoom()); + if (accommodationDto.getPrice() != null) { + matchingDto.setPrice(accommodationDto.getPrice()); + matchingDto.setPricePerOne(accommodationDto.getPrice() / Math.max(matchingDto.getCurrentMember(), 1)); + } + if (accommodationDto.getRoom() != null) { + matchingDto.setRoom(accommodationDto.getRoom()); + } } return matchingDto; } From a2fba57bff96f692b79b7c3c194bab4dac0de7ba Mon Sep 17 00:00:00 2001 From: Lemonade255 Date: Wed, 22 Nov 2023 22:29:22 +0900 Subject: [PATCH 15/15] =?UTF-8?q?feat(BE):=20=EC=B9=9C=EA=B5=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=EC=97=90=20=EC=B0=A8=EB=8B=A8=ED=95=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EB=AF=B8=ED=91=9C=EC=8B=9C=20BUS?= =?UTF-8?q?-225-MVP2-API-test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/rest/BlockListController.java | 19 ++++++++++++++++--- .../out/persistence/BlockListEntity.java | 4 ++-- .../BlockUserPersistentAdapter.java | 6 ++++++ .../port/out/GetBlockListPort.java | 3 +++ .../repositorty/BlockListRepository.java | 5 +++-- .../friend/repository/FriendRepository.java | 1 - .../api/friend/service/FriendService.java | 14 ++++++++++---- 7 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/example/api/blocklist/adapter/in/rest/BlockListController.java b/src/main/java/com/example/api/blocklist/adapter/in/rest/BlockListController.java index 5284b53..ead69bc 100644 --- a/src/main/java/com/example/api/blocklist/adapter/in/rest/BlockListController.java +++ b/src/main/java/com/example/api/blocklist/adapter/in/rest/BlockListController.java @@ -31,7 +31,11 @@ public class BlockListController { private final GetListUsecase getListUsecase; private final ReleaseBlockUsecase releaseBlockUsecase; - @Operation(summary = "add Block User", description = "차단할 유저 추가") + /** + * 사용자 차단 + * @param addBlockDto (데이터) + */ + @Operation(summary = "Block user", description = "사용자를 차단한다.") @PostMapping("/block") public void addBlockUser(@Valid @RequestBody AddBlockDto addBlockDto) { SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); @@ -42,7 +46,12 @@ public void addBlockUser(@Valid @RequestBody AddBlockDto addBlockDto) { addBlockUsecase.addBlockUser(addBlockDto, securityUser.getUserId()); } - @Operation(summary = "get List block User", description = "차단한 유저 리스트제공") + /** + * 차단한 사용자 목록 조회 + * @param pageable (데이터) + * @return blocked user list + */ + @Operation(summary = "Get blocked user list", description = "차단한 사용자 목록을 조회한다.") @GetMapping("/block") public List getBlockList(@PageableDefault(sort = "createdAt", direction = Sort.Direction.DESC, size = 30) Pageable pageable) { SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); @@ -53,7 +62,11 @@ public List getBlockList(@PageableDefault(sort = "createdAt", directi return getListUsecase.getBlockList(pageable, securityUser.getUserId()); } - @Operation(summary = "release block user", description = "차단한 유저 해제") + /** + * 사용자 차단 해제 + * @param deleteBlockDto (데이터) + */ + @Operation(summary = "Release blocked user", description = "사용자 차단을 해제한다.") @DeleteMapping("/block") public void releaseBlockUser(@Valid @RequestBody DeleteBlockDto deleteBlockDto) { SecurityUser securityUser = AuthenticationUtils.getCurrentUserAuthentication(); diff --git a/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockListEntity.java b/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockListEntity.java index bb5ccdd..3f6426b 100644 --- a/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockListEntity.java +++ b/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockListEntity.java @@ -21,10 +21,10 @@ public class BlockListEntity extends BaseEntity { @Id private UUID userId; - + + @Id @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(nullable = false, name="blocklist_userid", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) @ToString.Exclude - @Id private UserEntity blocklistUserId; } \ No newline at end of file diff --git a/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockUserPersistentAdapter.java b/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockUserPersistentAdapter.java index 0580434..0296e2d 100644 --- a/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockUserPersistentAdapter.java +++ b/src/main/java/com/example/api/blocklist/adapter/out/persistence/BlockUserPersistentAdapter.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.UUID; @Repository @@ -26,6 +27,11 @@ public class BlockUserPersistentAdapter implements AddBlockUserPort, GetBlockLis public void addBlockUser(BlockList blockList) { blockListRepository.save(blockMapperInterface.toEntity(blockList)); } + + @Override + public Optional getBlockUser(UUID userId, UUID blockedUserId) { + return blockListRepository.getByUserIdAndBlocklistUserId_UserId(userId, blockedUserId); + } @Override public List getBlockUserList(UUID userId, Pageable pageable) { diff --git a/src/main/java/com/example/api/blocklist/application/port/out/GetBlockListPort.java b/src/main/java/com/example/api/blocklist/application/port/out/GetBlockListPort.java index 761e3ac..aa8c0b1 100644 --- a/src/main/java/com/example/api/blocklist/application/port/out/GetBlockListPort.java +++ b/src/main/java/com/example/api/blocklist/application/port/out/GetBlockListPort.java @@ -1,11 +1,14 @@ package com.example.api.blocklist.application.port.out; +import com.example.api.blocklist.adapter.out.persistence.BlockListEntity; import com.example.api.blocklist.domain.BlockList; import org.springframework.data.domain.Pageable; import java.util.List; +import java.util.Optional; import java.util.UUID; public interface GetBlockListPort { + Optional getBlockUser(UUID userId, UUID blockedUserId); List getBlockUserList(UUID userId, Pageable pageable); } \ No newline at end of file diff --git a/src/main/java/com/example/api/blocklist/repositorty/BlockListRepository.java b/src/main/java/com/example/api/blocklist/repositorty/BlockListRepository.java index 534c719..a5188bf 100644 --- a/src/main/java/com/example/api/blocklist/repositorty/BlockListRepository.java +++ b/src/main/java/com/example/api/blocklist/repositorty/BlockListRepository.java @@ -8,11 +8,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.Param; +import java.util.Optional; import java.util.UUID; public interface BlockListRepository extends JpaRepository { - void deleteByUserIdAndBlocklistUserId_UserId(UUID userId, UUID blockListUserId); - + Optional getByUserIdAndBlocklistUserId_UserId(UUID userId, UUID blockedUserId); + void deleteByUserIdAndBlocklistUserId_UserId(UUID userId, UUID blockedUserId); @EntityGraph(attributePaths = {"blocklistUserId"}) Page findAllByUserId(@Param("userId") UUID userId, Pageable pageable); } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/repository/FriendRepository.java b/src/main/java/com/example/api/friend/repository/FriendRepository.java index 7183b6e..ea34822 100644 --- a/src/main/java/com/example/api/friend/repository/FriendRepository.java +++ b/src/main/java/com/example/api/friend/repository/FriendRepository.java @@ -10,6 +10,5 @@ public interface FriendRepository extends JpaRepository { List getByUserId(UUID userId); - Optional getByUserIdAndFriendId(UUID userId, UUID friendId); } \ No newline at end of file diff --git a/src/main/java/com/example/api/friend/service/FriendService.java b/src/main/java/com/example/api/friend/service/FriendService.java index db5394c..fddfa46 100644 --- a/src/main/java/com/example/api/friend/service/FriendService.java +++ b/src/main/java/com/example/api/friend/service/FriendService.java @@ -1,5 +1,6 @@ package com.example.api.friend.service; +import com.example.api.blocklist.application.port.out.GetBlockListPort; import com.example.api.friend.adapter.out.persistence.FriendEntity; import com.example.api.friend.adapter.out.persistence.FriendMapperInterface; import com.example.api.friend.application.port.in.AddFriendUsecase; @@ -10,6 +11,7 @@ import com.example.api.friend.application.port.out.FindFriendPort; import com.example.api.friend.domain.Friend; import com.example.api.friend.dto.FriendDto; +import com.example.api.user.adapter.out.persistence.UserEntity; import com.example.api.user.adapter.out.persistence.UserMapperInterface; import com.example.api.user.application.port.out.FindUserPort; import com.example.api.user.dto.FindUserDto; @@ -28,12 +30,13 @@ @Slf4j @Transactional(readOnly = true) public class FriendService implements AddFriendUsecase, FindFriendUsecase, DeleteFriendUsecase { - private final UserMapperInterface userMapper; - private final FriendMapperInterface friendMapper; private final FindUserPort findUserPort; private final AddFriendPort addFriendPort; private final FindFriendPort findFriendPort; private final DeleteFriendPort deleteFriendPort; + private final GetBlockListPort getBlockListPort; + private final UserMapperInterface userMapper; + private final FriendMapperInterface friendMapper; @Override @Transactional @@ -44,7 +47,7 @@ public FriendDto addFriend(FriendDto friendDto) { @Override public Boolean findFriend(UUID userId, UUID friendId) { - Optional friend = findFriendPort.findFriend(userId,friendId); + Optional friend = findFriendPort.findFriend(userId, friendId); return friend.isPresent(); } @@ -53,7 +56,10 @@ public List getFriendList(UUID userId) { List friendList = new ArrayList<>(); List friendPairList = findFriendPort.getFriendList(userId); for (FriendEntity friendPair: friendPairList) { - friendList.add(userMapper.toDto(findUserPort.getByUserId(friendPair.getFriendId()).orElseThrow())); + Optional userEntity = findUserPort.getByUserId(friendPair.getFriendId()); + if (userEntity.isPresent() && getBlockListPort.getBlockUser(userId, userEntity.get().getUserId()).isEmpty()) { + friendList.add(userMapper.toDto(userEntity.get())); + } } return friendList; }