Skip to content

Commit

Permalink
refactor: 팀플레이스 안에 멤버가 있는지 확인하는 로직 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
SproutMJ committed Jul 22, 2023
1 parent 68a0561 commit 5e5f3a3
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -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<MemberTeamPlace, Long> {

List<MemberTeamPlace> findMemberTeamPlacesByMemberEmail(Email email);

boolean existsByTeamPlaceId(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
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;

import java.util.Objects;
import java.util.regex.Pattern;

@EqualsAndHashCode
@Embeddable
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<String, String> pathVariables = (Map<String, String>) 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<MemberTeamPlace> 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<MemberTeamPlace> 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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -29,4 +30,11 @@ public TeamPlace(final Name name, final List<MemberTeamPlace> memberTeamPlaces)
this.name = name;
this.memberTeamPlaces = memberTeamPlaces;
}

public boolean hasMemberByMemberEmail(final Email email) {
return memberTeamPlaces.stream()
.anyMatch(memberTeamPlace -> memberTeamPlace.getMember()
.getEmail()
.equals(email));
}
}

0 comments on commit 5e5f3a3

Please sign in to comment.