From 5e5f3a3d1f001a0d62c3f672328ab291a8db22ea Mon Sep 17 00:00:00 2001 From: SproutMj Date: Sat, 22 Jul 2023 19:58:42 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=ED=8C=80=ED=94=8C=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=95=88=EC=97=90=20=EB=A9=A4=EB=B2=84?= =?UTF-8?q?=EA=B0=80=20=EC=9E=88=EB=8A=94=EC=A7=80=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/MemberTeamPlaceRepository.java | 7 ----- .../teambyteam/member/domain/vo/Email.java | 2 ++ .../configuration/TeamPlaceInterceptor.java | 30 +++++-------------- .../teamplace/domain/TeamPlace.java | 8 +++++ 4 files changed, 18 insertions(+), 29 deletions(-) diff --git a/backend/src/main/java/team/teamby/teambyteam/member/domain/MemberTeamPlaceRepository.java b/backend/src/main/java/team/teamby/teambyteam/member/domain/MemberTeamPlaceRepository.java index af5600ceb..ca84bcb73 100644 --- a/backend/src/main/java/team/teamby/teambyteam/member/domain/MemberTeamPlaceRepository.java +++ b/backend/src/main/java/team/teamby/teambyteam/member/domain/MemberTeamPlaceRepository.java @@ -1,13 +1,6 @@ package team.teamby.teambyteam.member.domain; import org.springframework.data.jpa.repository.JpaRepository; -import team.teamby.teambyteam.member.domain.vo.Email; - -import java.util.List; public interface MemberTeamPlaceRepository extends JpaRepository { - - List findMemberTeamPlacesByMemberEmail(Email email); - - boolean existsByTeamPlaceId(Long id); } diff --git a/backend/src/main/java/team/teamby/teambyteam/member/domain/vo/Email.java b/backend/src/main/java/team/teamby/teambyteam/member/domain/vo/Email.java index 056ef1435..91aeeba73 100644 --- a/backend/src/main/java/team/teamby/teambyteam/member/domain/vo/Email.java +++ b/backend/src/main/java/team/teamby/teambyteam/member/domain/vo/Email.java @@ -3,6 +3,7 @@ import jakarta.persistence.Column; import jakarta.persistence.Embeddable; import lombok.AccessLevel; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import team.teamby.teambyteam.member.exception.MemberException; @@ -10,6 +11,7 @@ import java.util.Objects; import java.util.regex.Pattern; +@EqualsAndHashCode @Embeddable @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter diff --git a/backend/src/main/java/team/teamby/teambyteam/teamplace/configuration/TeamPlaceInterceptor.java b/backend/src/main/java/team/teamby/teambyteam/teamplace/configuration/TeamPlaceInterceptor.java index 122502e2a..75f96e607 100644 --- a/backend/src/main/java/team/teamby/teambyteam/teamplace/configuration/TeamPlaceInterceptor.java +++ b/backend/src/main/java/team/teamby/teambyteam/teamplace/configuration/TeamPlaceInterceptor.java @@ -9,14 +9,13 @@ import org.springframework.util.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerMapping; -import team.teamby.teambyteam.member.domain.MemberTeamPlace; -import team.teamby.teambyteam.member.domain.MemberTeamPlaceRepository; import team.teamby.teambyteam.member.domain.vo.Email; import team.teamby.teambyteam.member.exception.MemberException; +import team.teamby.teambyteam.teamplace.domain.TeamPlace; +import team.teamby.teambyteam.teamplace.domain.TeamPlaceRepository; import team.teamby.teambyteam.teamplace.exception.TeamPlaceException; import java.util.Base64; -import java.util.List; import java.util.Map; @Component @@ -26,38 +25,25 @@ public final class TeamPlaceInterceptor implements HandlerInterceptor { private static final String PREFIX_BEARER = "Bearer "; private static final String EMAIL_KEY = "email"; - private final MemberTeamPlaceRepository memberTeamPlaceRepository; + private final TeamPlaceRepository teamPlaceRepository; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { final String token = extractToken(request); final String email = extractEmailFromToken(token); Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); - final Long teamPlaceId = Long.parseLong(pathVariables.get("teamPlaceId")); - final boolean notExistByTeamPlaceId = isNotExistByTeamPlaceId(teamPlaceId); - if (notExistByTeamPlaceId) { - throw new TeamPlaceException.NotFoundException("ID에 해당하는 팀 플레이스를 찾을 수 없습니다."); - } - final List memberTeamPlaces = memberTeamPlaceRepository.findMemberTeamPlacesByMemberEmail(new Email(email)); - if (noneMatchedTeamPlace(teamPlaceId, memberTeamPlaces)) { + if (hasNotMemberInTeamPlace(teamPlaceId, email)) { throw new TeamPlaceException.TeamPlaceAccessForbidden("접근할 수 없는 팀플레이스입니다."); } - return true; } - private boolean isNotExistByTeamPlaceId(final Long teamPlaceId) { - return !memberTeamPlaceRepository.existsByTeamPlaceId(teamPlaceId); - } - - private boolean noneMatchedTeamPlace(final Long teamPlaceId, final List memberHasTeamPlaces) { - return memberHasTeamPlaces.stream() - .noneMatch(memberTeamPlace -> memberTeamPlace - .getTeamPlace() - .getId() - .equals(teamPlaceId)); + private boolean hasNotMemberInTeamPlace(final Long teamPlaceId, final String email) { + final TeamPlace teamPlace = teamPlaceRepository.findById(teamPlaceId) + .orElseThrow(() -> new TeamPlaceException.NotFoundException("ID에 해당하는 팀 플레이스를 찾을 수 없습니다.")); + return !teamPlace.hasMemberByMemberEmail(new Email(email)); } private String extractToken(HttpServletRequest request) { diff --git a/backend/src/main/java/team/teamby/teambyteam/teamplace/domain/TeamPlace.java b/backend/src/main/java/team/teamby/teambyteam/teamplace/domain/TeamPlace.java index e23b9f67a..30c1c283d 100644 --- a/backend/src/main/java/team/teamby/teambyteam/teamplace/domain/TeamPlace.java +++ b/backend/src/main/java/team/teamby/teambyteam/teamplace/domain/TeamPlace.java @@ -6,6 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import team.teamby.teambyteam.member.domain.MemberTeamPlace; +import team.teamby.teambyteam.member.domain.vo.Email; import java.util.List; @@ -29,4 +30,11 @@ public TeamPlace(final Name name, final List memberTeamPlaces) this.name = name; this.memberTeamPlaces = memberTeamPlaces; } + + public boolean hasMemberByMemberEmail(final Email email) { + return memberTeamPlaces.stream() + .anyMatch(memberTeamPlace -> memberTeamPlace.getMember() + .getEmail() + .equals(email)); + } }