Skip to content

Commit

Permalink
Merge pull request #16 from giwoong01/feature/refactor
Browse files Browse the repository at this point in the history
refactor: 차단 유저 필터 처리
  • Loading branch information
giwoong01 authored May 8, 2024
2 parents ab28356 + fdbce0e commit 7c2e8f2
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@
import com.example.copro.member.api.dto.response.MemberInfoResDto;
import com.example.copro.member.api.dto.response.MemberResDto;
import com.example.copro.member.domain.Member;
import com.example.copro.member.domain.repository.BlockedMemberMappingRepository;
import com.example.copro.member.domain.repository.MemberLikeRepository;
import com.example.copro.member.domain.repository.MemberRepository;
import com.example.copro.member.exception.ExistsLikeMemberException;
import com.example.copro.member.exception.ExistsNickNameException;
import com.example.copro.member.exception.MemberNotFoundException;
import com.example.copro.notification.application.FCMNotificationService;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
Expand All @@ -21,21 +24,17 @@

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class MemberService {

@Value("${admin.email}")
private String adminEmail;

private final MemberRepository memberRepository;
private final MemberLikeRepository memberLikeRepository;
private final BlockedMemberMappingRepository blockedMemberMappingRepository;
private final FCMNotificationService fcmNotificationService;

public MemberService(MemberRepository memberRepository, MemberLikeRepository memberLikeRepository, FCMNotificationService fcmNotificationService) {
this.memberRepository = memberRepository;
this.memberLikeRepository = memberLikeRepository;
this.fcmNotificationService = fcmNotificationService;
}

// nickname으로 member채팅프로필 불러오기
public MemberResDto memberChattingProfileInfo(Member member, String targetEmail) {
Member targetMember = memberRepository.findByEmail(targetEmail).orElseThrow(MemberNotFoundException::new);
Expand All @@ -48,7 +47,9 @@ public MemberInfoResDto memberInfoList(Member member, String occupation, String
String o = Optional.ofNullable(occupation).map(String::trim).filter(s -> !s.isEmpty()).orElse(null);
String l = Optional.ofNullable(language).map(String::trim).filter(s -> !s.isEmpty()).orElse(null);

Page<Member> members = memberRepository.findAll(MemberSpecs.spec(o, l, career, adminEmail, member), PageRequest.of(page, size));
List<Long> blockedMemberIds = blockedMemberMappingRepository.findByBlockedMemberId(member);

Page<Member> members = memberRepository.findAll(MemberSpecs.spec(o, l, career, adminEmail, member, blockedMemberIds), PageRequest.of(page, size));

return MemberInfoResDto.of(getViewType(member), members.map(currentMember -> getMemberResDto(member, currentMember)));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.copro.member.domain.Member;
import jakarta.persistence.criteria.Predicate;
import java.util.List;
import org.springframework.data.jpa.domain.Specification;

public class MemberSpecs {
Expand Down Expand Up @@ -44,15 +45,20 @@ public static Specification<Member> excludeAdminEmail(String adminEmail) {
return (root, query, criteriaBuilder) -> criteriaBuilder.notEqual(root.get("email"), adminEmail);
}

public static Specification<Member> spec(String occupation, String language, int career, String adminEmail, Member member) {
public static Specification<Member> noBlockedMember(List<Long> blockedMemberIds) {
return (root, query, cb) -> blockedMemberIds.isEmpty() ? null : cb.not(root.get("id").in(blockedMemberIds));
}

public static Specification<Member> spec(String occupation, String language, int career, String adminEmail, Member member, List<Long> blockedMemberIds) {
return Specification
.where(MemberSpecs.hasOccupation(occupation))
.and(MemberSpecs.hasLanguage(language))
.and(MemberSpecs.hasCareer(career))
.and(MemberSpecs.notCurrentMember(member))
.and(MemberSpecs.isNotDeleted())
.and(MemberSpecs.isNicknameNotNull())
.and(MemberSpecs.excludeAdminEmail(adminEmail));
.and(MemberSpecs.excludeAdminEmail(adminEmail))
.and(MemberSpecs.noBlockedMember(blockedMemberIds));
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,22 @@

import com.example.copro.member.domain.BlockedMemberMapping;
import com.example.copro.member.domain.Member;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface BlockedMemberMappingRepository extends JpaRepository<BlockedMemberMapping, Long> {
Page<BlockedMemberMapping> findByMember(Member member, Pageable pageable);
boolean existsByMemberAndBlockedMember(Member member, Member blockedMember);

@Query("select bm.blockedMember.memberId "
+ "from BlockedMemberMapping bm "
+ "where bm.member = :member ")
List<Long> findByBlockedMemberId(@Param("member") Member member);

}

0 comments on commit 7c2e8f2

Please sign in to comment.