Skip to content

Commit

Permalink
Merge pull request #395 from depromeet/feature/389-mypage-black
Browse files Browse the repository at this point in the history
feat: λ§ˆμ΄νŽ˜μ΄μ§€ 차단 κ΅¬ν˜„
  • Loading branch information
ywonchae1 authored Sep 7, 2024
2 parents 090b02f + c603592 commit aa7c267
Show file tree
Hide file tree
Showing 9 changed files with 62 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ public interface BlacklistQueryUseCase {
BlacklistPage getBlackMembers(Long memberId, Long cursorId);

Set<Long> getBlackMemberIds(Long memberId);

Boolean checkBlockOrBlocked(Long loginMemberId, Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public interface BlacklistPersistencePort {
List<Long> findBlackMemberIdsByMemberId(Long memberId);

List<Long> findMemberIdsWhoBlockedMe(Long memberId);

Boolean isBlockOrBlocked(Long loginMemberId, Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ public Set<Long> getBlackMemberIds(Long memberId) {
return new HashSet<>(blackMemberIds);
}

@Override
public Boolean checkBlockOrBlocked(Long loginMemberId, Long memberId) {
return blacklistPersistencePort.isBlockOrBlocked(loginMemberId, memberId);
}

private List<Long> getBlackMemberIdsByMemberId(Long memberId) {
return blacklistPersistencePort.findBlackMemberIdsByMemberId(memberId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
public enum ReportReasonCode implements CodedEnum<String> {
REPORT_REASON_1("슀팸, κ΄‘κ³ "),
REPORT_REASON_2("폭λ ₯적인 λ°œμ–Έ"),
REPORT_REASON_3("μŒλž€μ„±, μ„ μ • λ‚΄μš©"),
REPORT_REASON_3("μŒλž€μ„±, μ„ μ •μ„± λ‚΄μš©"),
REPORT_REASON_4("κ°œμΈμ •λ³΄ λ…ΈμΆœ"),
REPORT_REASON_5("μ£Όμ œμ™€ 무관");
REPORT_REASON_5("수영과 λ¬΄κ΄€ν•œ λ‚΄μš©");

private String value;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ public enum MemberErrorType implements ErrorType {
UPDATE_FAILED("MEMBER_7", "λ©€λ²„μ˜ 정보 μˆ˜μ •μ— μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€"),
UPDATE_PROFILE_IMAGE_FAILED("MEMBER_8", "λ©€λ²„μ˜ ν”„λ‘œν•„ 이미지 μˆ˜μ •μ— μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€"),
UPDATE_LAST_VIEWED_FOLLOWING_LOG_AT("MEMBER_9", "λ©€λ²„μ˜ 졜근 νŒ”λ‘œμž‰ μ†Œμ‹ 쑰회 μ‹œκ°„ 변경에 μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€"),
NOT_FOUND_FROM_ID_LIST("MEMBER_10", "μš”μ²­λœ 멀버 ID 쀑 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 멀버가 μžˆμŠ΅λ‹ˆλ‹€");
NOT_FOUND_FROM_ID_LIST("MEMBER_10", "μš”μ²­λœ 멀버 ID 쀑 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 멀버가 μžˆμŠ΅λ‹ˆλ‹€"),
MEMBER_BLOCK_OR_BLOCKED("MEMBER_11", "멀버λ₯Ό μ°¨λ‹¨ν–ˆκ±°λ‚˜ λ©€λ²„μ—κ²Œ 차단 λ‹Ήν–ˆμŠ΅λ‹ˆλ‹€");

private final String code;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ public class BlacklistRepository implements BlacklistPersistencePort {
private final JPAQueryFactory queryFactory;
private final BlacklistJpaRepository blacklistJpaRepository;

QMemberEntity member = new QMemberEntity("member"); // 첫 번째 별칭 "member"
QMemberEntity blackMember = new QMemberEntity("blackMember");

@Override
public Blacklist save(Blacklist blacklist) {
return blacklistJpaRepository.save(BlacklistEntity.from(blacklist)).toModel();
Expand All @@ -38,9 +41,6 @@ public void unblackMember(Long memberId, Long blackMemberId) {

@Override
public List<Member> findBlackMembers(Long memberId, Long cursorId) {
QMemberEntity member = new QMemberEntity("member"); // 첫 번째 별칭 "member"
QMemberEntity blackMember = new QMemberEntity("blackMember");

return queryFactory
.select(
Projections.constructor(
Expand All @@ -57,20 +57,6 @@ public List<Member> findBlackMembers(Long memberId, Long cursorId) {
.fetch();
}

private static BooleanExpression memberEq(Long memberId) {
if (memberId == null) {
return null;
}
return blacklistEntity.member.id.eq(memberId);
}

private BooleanExpression blacklistIdLoe(Long cursorId) {
if (cursorId == null) {
return null;
}
return blacklistEntity.blackMember.id.loe(cursorId);
}

@Override
public List<Long> findBlackMemberIdsByMemberId(Long memberId) {
return queryFactory
Expand All @@ -85,7 +71,40 @@ public List<Long> findMemberIdsWhoBlockedMe(Long memberId) {
return queryFactory
.select(blacklistEntity.member.id)
.from(blacklistEntity)
.where(blacklistEntity.blackMember.id.eq(memberId))
.where(blackMemberEq(memberId))
.fetch();
}

@Override
public Boolean isBlockOrBlocked(Long loginMemberId, Long memberId) {
return !queryFactory
.select(blacklistEntity.id)
.from(blacklistEntity)
.join(blacklistEntity.member, member)
.join(blacklistEntity.blackMember, blackMember)
.where(
memberEq(loginMemberId)
.and(blackMemberEq(memberId))
.or(memberEq(memberId).and(blackMemberEq(loginMemberId))))
.fetch()
.isEmpty();
}

private static BooleanExpression memberEq(Long memberId) {
if (memberId == null) {
return null;
}
return blacklistEntity.member.id.eq(memberId);
}

private static BooleanExpression blackMemberEq(Long memberId) {
return blacklistEntity.blackMember.id.eq(memberId);
}

private BooleanExpression blacklistIdLoe(Long cursorId) {
if (cursorId == null) {
return null;
}
return blacklistEntity.blackMember.id.loe(cursorId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class MemberController implements MemberApi {
public ApiResponse<MemberProfileResponse> getMember(
@LoginMember Long memberId, @PathVariable("id") Long id) {
return ApiResponse.success(
MemberSuccessType.GET_SUCCESS, memberFacade.findById(memberId, id));
MemberSuccessType.GET_SUCCESS, memberFacade.findByIdAndCheckBlack(memberId, id));
}

@PatchMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static com.depromeet.member.service.MemberValidator.isMyProfile;

import com.depromeet.blacklist.port.in.usecase.BlacklistQueryUseCase;
import com.depromeet.exception.ForbiddenException;
import com.depromeet.friend.domain.vo.FriendCount;
import com.depromeet.friend.port.in.FollowUseCase;
import com.depromeet.member.domain.Member;
Expand All @@ -18,6 +19,7 @@
import com.depromeet.member.port.in.command.SocialMemberCommand;
import com.depromeet.member.port.in.usecase.MemberUpdateUseCase;
import com.depromeet.member.port.in.usecase.MemberUseCase;
import com.depromeet.type.member.MemberErrorType;
import java.util.List;
import java.util.Set;
import lombok.RequiredArgsConstructor;
Expand All @@ -30,15 +32,20 @@
@Transactional
public class MemberFacade {
private final MemberUseCase memberUseCase;
private final BlacklistQueryUseCase blacklistQueryUseCase;
private final MemberUpdateUseCase memberUpdateUseCase;
private final FollowUseCase followUseCase;
private final MemberUpdateUseCase memberUpdateUseCase;
private final BlacklistQueryUseCase blacklistQueryUseCase;

@Value("${cloud-front.domain}")
private String profileImageOrigin;

@Transactional(readOnly = true)
public MemberProfileResponse findById(Long loginMemberId, Long memberId) {
public MemberProfileResponse findByIdAndCheckBlack(Long loginMemberId, Long memberId) {
Boolean isBlackOrBlacked =
blacklistQueryUseCase.checkBlockOrBlocked(loginMemberId, memberId);
if (isBlackOrBlacked) {
throw new ForbiddenException(MemberErrorType.MEMBER_BLOCK_OR_BLOCKED);
}
Boolean isMyProfile = isMyProfile(memberId, loginMemberId);
Member member = memberUseCase.findById(memberId);
FriendCount friendCount = followUseCase.countFriendByMemberId(memberId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ spring:
import: optional:application-secret.properties
jpa:
hibernate:
ddl-auto: update # μ‹€μ œ μ„œλ²„μ—μ„œ μ‚¬μš©μ‹œ λͺ¨λ“  데이터가 λ‹€ λ‚ μ•„κ°€λ―€λ‘œ 주의
ddl-auto: none # μ‹€μ œ μ„œλ²„μ—μ„œ μ‚¬μš©μ‹œ λͺ¨λ“  데이터가 λ‹€ λ‚ μ•„κ°€λ―€λ‘œ 주의
defer-datasource-initialization: false
properties:
hibernate:
Expand Down

0 comments on commit aa7c267

Please sign in to comment.