Skip to content

Commit

Permalink
Merge pull request #394 from depromeet/feature/393-remove-black-membeโ€ฆ
Browse files Browse the repository at this point in the history
โ€ฆr-from-follow-list

feat: ์œ ์ € ์ฐจ๋‹จ ์‹œ ํŒ”๋กœ์›Œ/ํŒ”๋กœ์ž‰ ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œ ๋ฐ ์ฐจ๋‹จํ•œ ์œ ์ €/๋ณธ์ธ์„ ์ฐจ๋‹จํ•œ ์œ ์ €๋ฅผ ํŒ”๋กœ์šฐ ํ•  ๋•Œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • Loading branch information
penrose15 authored Sep 7, 2024
2 parents aa7c267 + 6b1a008 commit 8c48045
Show file tree
Hide file tree
Showing 11 changed files with 59 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.depromeet.friend.port.in.command;

public record DeleteFollowCommand(Long requesterId, Long blackMemberId) {}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.depromeet.friend.port.in;
package com.depromeet.friend.port.in.usecase;

import com.depromeet.friend.domain.vo.*;
import com.depromeet.friend.port.in.command.DeleteFollowCommand;
import com.depromeet.member.domain.Member;
import java.util.List;

Expand All @@ -22,4 +23,6 @@ public interface FollowUseCase {
void deleteByMemberId(Long memberId);

List<FollowCheck> checkFollowingState(Long memberId, List<Long> targetIds);

void deleteBlackMemberInFollowList(DeleteFollowCommand deleteFollowCommand);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public interface FriendPersistencePort {

void deleteByMemberIdAndFollowingId(Long memberId, Long followingId);

void deleteFollowerFollowingByMemberIdAndFollowingId(Long memberId, Long followingId);

List<Following> findFollowingsByMemberIdAndCursorId(Long memberId, Long cursorId);

List<Follower> findFollowersByMemberIdAndCursorId(Long memberId, Long cursorId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import com.depromeet.exception.BadRequestException;
import com.depromeet.friend.domain.Friend;
import com.depromeet.friend.domain.vo.*;
import com.depromeet.friend.port.in.FollowUseCase;
import com.depromeet.friend.port.in.command.DeleteFollowCommand;
import com.depromeet.friend.port.in.usecase.FollowUseCase;
import com.depromeet.friend.port.out.persistence.FriendPersistencePort;
import com.depromeet.member.domain.Member;
import com.depromeet.type.friend.FollowErrorType;
Expand All @@ -12,7 +13,10 @@
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;

@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -107,4 +111,14 @@ public void deleteByMemberId(Long memberId) {
public List<FollowCheck> checkFollowingState(Long memberId, List<Long> targetIds) {
return friendPersistencePort.findByMemberIdAndFollowingIds(memberId, targetIds);
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void deleteBlackMemberInFollowList(DeleteFollowCommand deleteFollowCommand) {
Long requesterId = deleteFollowCommand.requesterId();
Long blackMemberId = deleteFollowCommand.blackMemberId();

friendPersistencePort.deleteFollowerFollowingByMemberIdAndFollowingId(
requesterId, blackMemberId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ public void deleteByMemberIdAndFollowingId(Long memberId, Long followingId) {
&& item.getFollowing().getId().equals(followingId));
}

@Override
public void deleteFollowerFollowingByMemberIdAndFollowingId(Long memberId, Long followingId) {}

@Override
public List<Following> findFollowingsByMemberIdAndCursorId(Long memberId, Long cursorId) {
return friends.stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
public enum FollowErrorType implements ErrorType {
NOT_FOUND("FOLLOW_1", "ํŒ”๋กœ์ž‰ ์œ ์ €๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"),
SELF_FOLLOWING_NOT_ALLOWED("FOLLOW_2", "์ž๊ธฐ ์ž์‹ ์„ ํŒ”๋กœ์ž‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"),
INVALID_FOLLOW_TYPE("FOLLOW_3", "์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ํŒ”๋กœ์šฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค");
INVALID_FOLLOW_TYPE("FOLLOW_3", "์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ํŒ”๋กœ์šฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค"),
CANNOT_FOLLOW_BLACK("FOLLOW_4", "์ฐจ๋‹จํ•œ ์‚ฌ๋žŒ์„ ํŒ”๋กœ์šฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"),
CANNOT_FOLLOW_MEMBER_WHO_BLOCKED_YOU("FOLLOW_5", "๋ณธ์ธ์„ ์ฐจ๋‹จํ•œ ์‚ฌ๋žŒ์„ ํŒ”๋กœ์šฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค");

private final String code;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,18 @@ public void deleteByMemberIdAndFollowingId(Long memberId, Long followingId) {
.execute();
}

@Override
public void deleteFollowerFollowingByMemberIdAndFollowingId(Long memberId, Long followingId) {
queryFactory
.delete(friend)
.where(checkFollow(memberId, followingId).or(checkFollow(followingId, memberId)))
.execute();
}

private BooleanExpression checkFollow(Long memberId, Long followingId) {
return friend.member.id.eq(memberId).and(friend.following.id.eq(followingId));
}

@Override
public List<Following> findFollowingsByMemberIdAndCursorId(Long memberId, Long cursorId) {
return queryFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import com.depromeet.dto.auth.AccountProfileResponse;
import com.depromeet.exception.NotFoundException;
import com.depromeet.followinglog.port.in.FollowingMemoryLogUseCase;
import com.depromeet.friend.port.in.FollowUseCase;
import com.depromeet.friend.port.in.usecase.FollowUseCase;
import com.depromeet.image.port.in.ImageUpdateUseCase;
import com.depromeet.member.domain.Member;
import com.depromeet.member.mapper.MemberMapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@
import com.depromeet.blacklist.port.in.usecase.BlacklistCommandUseCase;
import com.depromeet.blacklist.port.in.usecase.BlacklistQueryUseCase;
import com.depromeet.exception.BadRequestException;
import com.depromeet.friend.port.in.command.DeleteFollowCommand;
import com.depromeet.type.blacklist.BlacklistErrorType;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
@RequiredArgsConstructor
public class BlacklistFacade {
private final ApplicationEventPublisher eventPublisher;
private final BlacklistQueryUseCase blacklistQueryUseCase;
private final BlacklistCommandUseCase blacklistCommandUseCase;

Expand All @@ -34,6 +37,7 @@ public void blackMember(Long memberId, BlackMemberRequest request) {
}

blacklistCommandUseCase.blackMember(memberId, blackMemberId);
eventPublisher.publishEvent(new DeleteFollowCommand(memberId, blackMemberId));
}

public void unblackMember(Long memberId, Long blackMemberId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.depromeet.friend.facade;

import com.depromeet.blacklist.port.in.usecase.BlacklistQueryUseCase;
import com.depromeet.exception.BadRequestException;
import com.depromeet.friend.domain.vo.FollowCheck;
import com.depromeet.friend.domain.vo.FollowSlice;
import com.depromeet.friend.domain.vo.Follower;
import com.depromeet.friend.domain.vo.Following;
import com.depromeet.friend.dto.request.FollowRequest;
import com.depromeet.friend.dto.response.*;
import com.depromeet.friend.port.in.FollowUseCase;
import com.depromeet.friend.port.in.usecase.FollowUseCase;
import com.depromeet.member.domain.Member;
import com.depromeet.member.port.in.usecase.MemberUseCase;
import com.depromeet.notification.event.FollowLogEvent;
import com.depromeet.type.friend.FollowErrorType;
import java.util.List;
import java.util.Set;
import lombok.RequiredArgsConstructor;
Expand All @@ -34,6 +36,14 @@ public class FollowFacade {
public boolean addOrDeleteFollow(Long memberId, FollowRequest followRequest) {
Member member = memberUseCase.findById(memberId);
Member following = memberUseCase.findById(followRequest.followingId());

if (blacklistQueryUseCase.checkBlackMember(member.getId(), following.getId())) {
throw new BadRequestException(FollowErrorType.CANNOT_FOLLOW_BLACK);
}
if (blacklistQueryUseCase.checkBlackMember(following.getId(), member.getId())) {
throw new BadRequestException(FollowErrorType.CANNOT_FOLLOW_MEMBER_WHO_BLOCKED_YOU);
}

boolean isAdd = followUseCase.addOrDeleteFollow(member, following);
eventPublisher.publishEvent(FollowLogEvent.of(following, member));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
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.friend.port.in.usecase.FollowUseCase;
import com.depromeet.member.domain.Member;
import com.depromeet.member.domain.MemberGender;
import com.depromeet.member.domain.vo.MemberSearchInfo;
Expand Down

0 comments on commit 8c48045

Please sign in to comment.