Skip to content
This repository has been archived by the owner on Mar 26, 2024. It is now read-only.

Commit

Permalink
[Feat] 최근 여행 정보 Response 변경
Browse files Browse the repository at this point in the history
`-` SpaceIdResponse
`+` SpaceResponse
  • Loading branch information
NoJaeHyuk committed Jan 24, 2024
1 parent 8c1d519 commit 8207a2a
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -89,7 +92,7 @@ public ApiResponse<JourneysResponse> updatePlacesForSpace(
}

@GetMapping("/recent")
public ApiResponse<SpaceIdResponse> recentSpace(@AuthenticationPrincipal UserPrincipal userPrincipal) {
public ApiResponse<SpaceResponse> recentSpace(@AuthenticationPrincipal UserPrincipal userPrincipal) {
return ApiResponse.ok(spaceTokenService.getRecentSpace(userPrincipal.id()));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
}

Expand All @@ -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) {
Expand All @@ -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());
}
}

0 comments on commit 8207a2a

Please sign in to comment.