From 8207a2a40ce423109d569d0ba3edcf13d345bdf2 Mon Sep 17 00:00:00 2001 From: NOJaeHyuk Date: Wed, 24 Jan 2024 22:31:53 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]=20=EC=B5=9C=EA=B7=BC=20=EC=97=AC?= =?UTF-8?q?=ED=96=89=20=EC=A0=95=EB=B3=B4=20Response=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `-` SpaceIdResponse `+` SpaceResponse --- .../space/controller/SpaceController.java | 9 +++-- .../space/exception/SpaceErrorCode.java | 3 +- .../space/service/SpaceTokenService.java | 35 ++++++++++++------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/fc/be/app/domain/space/controller/SpaceController.java b/app/src/main/java/fc/be/app/domain/space/controller/SpaceController.java index 1ceff96d..af0f5d25 100644 --- a/app/src/main/java/fc/be/app/domain/space/controller/SpaceController.java +++ b/app/src/main/java/fc/be/app/domain/space/controller/SpaceController.java @@ -4,11 +4,14 @@ import fc.be.app.domain.space.dto.request.SelectedPlaceRequest; import fc.be.app.domain.space.dto.request.SelectedPlacesRequest; import fc.be.app.domain.space.dto.request.TitleUpdateRequest; -import fc.be.app.domain.space.dto.response.*; +import fc.be.app.domain.space.dto.response.CitiesResponse; +import fc.be.app.domain.space.dto.response.JourneyResponse; +import fc.be.app.domain.space.dto.response.JourneysResponse; +import fc.be.app.domain.space.dto.response.SpaceResponse; import fc.be.app.domain.space.service.SpaceService; +import fc.be.app.domain.space.service.SpaceTokenService; import fc.be.app.global.config.security.model.user.UserPrincipal; import fc.be.app.global.http.ApiResponse; -import fc.be.app.domain.space.service.SpaceTokenService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -89,7 +92,7 @@ public ApiResponse updatePlacesForSpace( } @GetMapping("/recent") - public ApiResponse recentSpace(@AuthenticationPrincipal UserPrincipal userPrincipal) { + public ApiResponse recentSpace(@AuthenticationPrincipal UserPrincipal userPrincipal) { return ApiResponse.ok(spaceTokenService.getRecentSpace(userPrincipal.id())); } diff --git a/app/src/main/java/fc/be/app/domain/space/exception/SpaceErrorCode.java b/app/src/main/java/fc/be/app/domain/space/exception/SpaceErrorCode.java index 6cc0cfd5..b9b51579 100644 --- a/app/src/main/java/fc/be/app/domain/space/exception/SpaceErrorCode.java +++ b/app/src/main/java/fc/be/app/domain/space/exception/SpaceErrorCode.java @@ -12,7 +12,8 @@ public enum SpaceErrorCode { NOT_JOINED_MEMBER(404, "NOT_JOINED_MEMBER", "여행스페이스에 속한 회원이 아닙니다."), SPACE_IS_READ_ONLY(400, "SPACE_IS_READ_ONLY", "여행스페이스가 읽기전용이기 때문에 수정할 수 없습니다."), SPACE_MAX_COUNT_OVER(400, "SPACE_MAX_COUNT_OVER", "여행스페이스 생성 최대 개수를 초과하셨습니다."), - NO_SUCH_CITY(404, "NO_SUCH_CITY", "해당 도시가 없습니다."); + NO_SUCH_CITY(404, "NO_SUCH_CITY", "해당 도시가 없습니다."), + SELECTED_PLACES_COUNT_OVER(400, "SELECTED_PLACES_COUNT_OVER", "여정당 등록할 수 있는 최대 개수를 초과하셨습니다."); private final Integer responseCode; private final String title; diff --git a/app/src/main/java/fc/be/app/domain/space/service/SpaceTokenService.java b/app/src/main/java/fc/be/app/domain/space/service/SpaceTokenService.java index 9f5dd295..759b3fb4 100644 --- a/app/src/main/java/fc/be/app/domain/space/service/SpaceTokenService.java +++ b/app/src/main/java/fc/be/app/domain/space/service/SpaceTokenService.java @@ -1,6 +1,7 @@ package fc.be.app.domain.space.service; import fc.be.app.domain.space.dto.response.SpaceIdResponse; +import fc.be.app.domain.space.dto.response.SpaceResponse; import fc.be.app.domain.space.entity.JoinedMember; import fc.be.app.domain.space.entity.Space; import fc.be.app.domain.space.exception.SpaceException; @@ -27,7 +28,10 @@ public class SpaceTokenService { private final JoinedMemberRepository joinedMemberRepository; public void saveVisitedSpace(Long memberId, Long spaceId, LocalDate endDate) { - if (endDate != null && isReadOnly(spaceId, LocalDate.now())) { + Space space = spaceRepository.findById(spaceId) + .orElseThrow(() -> new SpaceException(SPACE_NOT_FOUND)); + + if (isSpaceReadOnly(space)) { return; } @@ -45,17 +49,25 @@ public void saveVisitedSpace(Long memberId, Long spaceId, LocalDate endDate) { } } - public SpaceIdResponse getRecentSpace(Long memberId) { + public SpaceResponse getRecentSpace(Long memberId) { String key = "recent_space_member:" + memberId; SpaceToken spaceToken = redisTemplateWithSpace.opsForValue().get(key); - if (spaceToken == null || isReadOnly(spaceToken.spaceId(), LocalDate.now())) { + if (spaceToken == null || !isValidSpace(spaceToken.spaceId())) { JoinedMember joinedMember = findRecentJoinedMember(memberId, LocalDate.now()); - return SpaceIdResponse.of(joinedMember.getSpace().getId()); + return SpaceResponse.of(joinedMember.getSpace()); } - return SpaceIdResponse.of(spaceToken.spaceId()); + Space space = spaceRepository.findById(spaceToken.spaceId()) + .orElseThrow(() -> new SpaceException(SPACE_NOT_FOUND)); + + if (isSpaceReadOnly(space)) { + JoinedMember joinedMember = findRecentJoinedMember(memberId, LocalDate.now()); + return SpaceResponse.of(joinedMember.getSpace()); + } + + return SpaceResponse.of(space); } private JoinedMember findRecentJoinedMember(Long memberId, LocalDate currentDate) { @@ -72,14 +84,11 @@ private JoinedMember findRecentJoinedMember(Long memberId, LocalDate currentDate return activeJoinedMemberBySpace.getContent().get(0); } - private boolean isReadOnly(Long spaceId, LocalDate currentDate) { - Space space = spaceRepository.findById(spaceId) - .orElseThrow(() -> new SpaceException(SPACE_NOT_FOUND)); - - if(space.getEndDate() == null){ - return false; - } + private boolean isValidSpace(Long spaceId) { + return spaceId != null && spaceRepository.existsById(spaceId); + } - return space.isReadOnly(currentDate); + private boolean isSpaceReadOnly(Space space) { + return space.getEndDate() != null && space.isReadOnly(LocalDate.now()); } }