Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deploy: 서버 배포 #396

Merged
merged 16 commits into from
Sep 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
@@ -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 @@ -12,20 +12,14 @@ public class MemberSearchInfo {
private String nickname;
private String profileImageUrl;
private String introduction;
private boolean hasFollowed;

@Builder
public MemberSearchInfo(
Long memberId,
String nickname,
String profileImageUrl,
String introduction,
boolean hasFollowed) {
Long memberId, String nickname, String profileImageUrl, String introduction) {
this.memberId = memberId;
this.nickname = nickname;
this.profileImageUrl = profileImageUrl;
this.introduction = introduction;
this.hasFollowed = hasFollowed;
}

public String getProfileImageUrl(String profileImageOrigin) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,12 @@
@NoArgsConstructor
public class MemberSearchPage {
private List<MemberSearchInfo> members;
private int pageSize;
private Long cursorId;
private boolean hasNext;

@Builder
public MemberSearchPage(
List<MemberSearchInfo> members, int pageSize, Long cursorId, boolean hasNext) {
public MemberSearchPage(List<MemberSearchInfo> members, Long cursorId, boolean hasNext) {
this.members = members;
this.pageSize = pageSize;
this.cursorId = cursorId;
this.hasNext = hasNext;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
import com.depromeet.member.domain.Member;
import com.depromeet.member.domain.MemberGender;
import com.depromeet.member.domain.vo.MemberIdAndNickname;
import com.depromeet.member.domain.vo.MemberSearchPage;
import com.depromeet.member.domain.vo.MemberSearchInfo;
import com.depromeet.member.port.in.command.UpdateMemberCommand;
import java.util.List;
import java.util.Optional;

public interface MemberPersistencePort {
Expand All @@ -24,7 +25,7 @@ public interface MemberPersistencePort {

void deleteById(Long id);

MemberSearchPage searchByNameQuery(Long memberId, String nameQuery, Long cursorId);
List<MemberSearchInfo> searchByNameQuery(Long memberId, String nameQuery, Long cursorId);

Optional<Member> updateLatestViewedFollowingLogAt(Long memberId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.depromeet.member.domain.MemberGender;
import com.depromeet.member.domain.MemberRole;
import com.depromeet.member.domain.vo.MemberIdAndNickname;
import com.depromeet.member.domain.vo.MemberSearchInfo;
import com.depromeet.member.domain.vo.MemberSearchPage;
import com.depromeet.member.port.in.command.SocialMemberCommand;
import com.depromeet.member.port.in.command.UpdateMemberCommand;
Expand All @@ -16,6 +17,8 @@
import com.depromeet.member.port.in.usecase.MemberUseCase;
import com.depromeet.member.port.out.persistence.MemberPersistencePort;
import com.depromeet.type.member.MemberErrorType;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -62,7 +65,22 @@ public void deleteById(Long id) {

@Override
public MemberSearchPage searchMemberByName(Long memberId, String nameQuery, Long cursorId) {
return memberPersistencePort.searchByNameQuery(memberId, nameQuery, cursorId);
List<MemberSearchInfo> memberSearchInfos =
memberPersistencePort.searchByNameQuery(memberId, nameQuery, cursorId);

boolean hasNext = false;
Long nextCursorId = null;
if (memberSearchInfos.size() > 10) {
memberSearchInfos = new ArrayList<>(memberSearchInfos);
memberSearchInfos.removeLast();
hasNext = true;
nextCursorId = memberSearchInfos.getLast().getMemberId();
}
return MemberSearchPage.builder()
.members(memberSearchInfos)
.cursorId(nextCursorId)
.hasNext(hasNext)
.build();
}

@Override
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 @@ -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 @@ -3,7 +3,7 @@
import com.depromeet.member.domain.Member;
import com.depromeet.member.domain.MemberGender;
import com.depromeet.member.domain.vo.MemberIdAndNickname;
import com.depromeet.member.domain.vo.MemberSearchPage;
import com.depromeet.member.domain.vo.MemberSearchInfo;
import com.depromeet.member.port.in.command.UpdateMemberCommand;
import com.depromeet.member.port.out.persistence.MemberPersistencePort;
import java.util.ArrayList;
Expand Down Expand Up @@ -87,7 +87,8 @@ public void deleteById(Long id) {
}

@Override
public MemberSearchPage searchByNameQuery(Long memberId, String nameQuery, Long cursorId) {
public List<MemberSearchInfo> searchByNameQuery(
Long memberId, String nameQuery, Long cursorId) {
return null;
}

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 @@ -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 @@ -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
Loading