Skip to content

Commit c39eac7

Browse files
committed
[feat] 일반 구성원 목록 조회 QueryDSL 추가
1 parent 7e52a28 commit c39eac7

3 files changed

Lines changed: 127 additions & 1 deletion

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.ject.support.domain.member.repository;
2+
3+
import java.util.List;
4+
5+
import org.ject.support.admin.member.dto.projection.SearchMemberSemesterProjection;
6+
import org.ject.support.admin.member.dto.request.MemberSemesterSearchCondition;
7+
8+
public interface MemberActivityQueryRepository {
9+
List<SearchMemberSemesterProjection> searchMemberSemesters(
10+
MemberSemesterSearchCondition condition,
11+
int limit
12+
);
13+
14+
long countMemberSemesters(MemberSemesterSearchCondition conditon);
15+
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package org.ject.support.domain.member.repository;
2+
3+
import static org.ject.support.domain.member.entity.QMember.*;
4+
import static org.ject.support.domain.member.entity.QMemberActivity.*;
5+
import static org.ject.support.domain.member.entity.QMemberSemester.*;
6+
7+
import java.util.List;
8+
9+
import org.ject.support.admin.member.dto.projection.SearchMemberSemesterProjection;
10+
import org.ject.support.admin.member.dto.request.MemberSemesterSearchCondition;
11+
import org.ject.support.domain.member.CareerDetails;
12+
import org.ject.support.domain.member.JobFamily;
13+
import org.ject.support.domain.member.MemberType;
14+
import org.ject.support.domain.recruit.domain.RecruitTypeDetail;
15+
16+
import com.querydsl.core.types.Projections;
17+
import com.querydsl.core.types.dsl.BooleanExpression;
18+
import com.querydsl.jpa.impl.JPAQueryFactory;
19+
20+
import lombok.RequiredArgsConstructor;
21+
22+
@RequiredArgsConstructor
23+
public class MemberActivityQueryRepositoryImpl implements MemberActivityQueryRepository {
24+
25+
private final JPAQueryFactory jpaQueryFactory;
26+
27+
//다중 값은 in, 단일 값은 eq로 필터링
28+
//id기준 내림차순 - 최신순
29+
//size+1개 조회
30+
@Override
31+
public List<SearchMemberSemesterProjection> searchMemberSemesters(MemberSemesterSearchCondition condition, int limit) {
32+
return jpaQueryFactory.select(Projections.constructor(
33+
SearchMemberSemesterProjection.class,
34+
memberActivity.id,
35+
member.name,
36+
memberActivity.jobFamily,
37+
member.phoneNumber,
38+
memberActivity.careerDetails,
39+
memberActivity.experiencePeriod
40+
))
41+
.from(memberActivity)
42+
.join(member).on(member.id.eq(memberActivity.memberId))
43+
.join(memberSemester).on(memberSemester.id.eq(memberActivity.id))
44+
.where(
45+
cursorLt(condition.cursor()),
46+
semesterIdIn(condition.semesterId()),
47+
jobFamilyIn(condition.jobFamilies()),
48+
careerDetailsIn(condition.careerDetails()),
49+
teamIdIn(condition.teamIds()),
50+
recruitTypeDetailsIn(condition.recruitTypeDetails()),
51+
member.isDeleted.isFalse(),
52+
memberActivity.isDeleted.isFalse(),
53+
memberActivity.memberType.eq(MemberType.SEMESTER)
54+
).orderBy(memberActivity.id.desc())
55+
.limit(limit)
56+
.fetch();
57+
}
58+
59+
@Override
60+
public long countMemberSemesters(MemberSemesterSearchCondition condition) {
61+
Long count = jpaQueryFactory.select(memberActivity.id.count())
62+
.from(memberActivity)
63+
.join(member).on(member.id.eq(memberActivity.memberId))
64+
.join(memberSemester).on(memberSemester.id.eq(memberActivity.id))
65+
.where(
66+
semesterIdIn(condition.semesterId()),
67+
jobFamilyIn(condition.jobFamilies()),
68+
careerDetailsIn(condition.careerDetails()),
69+
teamIdIn(condition.teamIds()),
70+
recruitTypeDetailsIn(condition.recruitTypeDetails()),
71+
member.isDeleted.isFalse(),
72+
memberActivity.isDeleted.isFalse(),
73+
memberActivity.memberType.eq(MemberType.SEMESTER)
74+
).fetchOne();
75+
76+
return count == null ? 0L : count;
77+
}
78+
79+
private BooleanExpression cursorLt(Long cursor){
80+
return cursor == null ? null : memberActivity.id.lt(cursor);
81+
}
82+
83+
private BooleanExpression semesterIdIn(Long semesterId) {
84+
return semesterId == null ? null
85+
: memberSemester.semesterId.eq(semesterId);
86+
}
87+
88+
private BooleanExpression jobFamilyIn(List<JobFamily> jobFamilies) {
89+
return jobFamilies == null || jobFamilies.isEmpty()
90+
? null
91+
: memberActivity.jobFamily.in(jobFamilies);
92+
}
93+
94+
private BooleanExpression careerDetailsIn(List<CareerDetails> careerDetails) {
95+
return careerDetails == null || careerDetails.isEmpty()
96+
? null
97+
: memberActivity.careerDetails.in(careerDetails);
98+
}
99+
100+
private BooleanExpression teamIdIn(List<Long> teamIds) {
101+
return teamIds == null || teamIds.isEmpty()
102+
? null
103+
: memberSemester.teamId.in(teamIds);
104+
}
105+
106+
private BooleanExpression recruitTypeDetailsIn(List<RecruitTypeDetail> recruitTypeDetails) {
107+
return recruitTypeDetails == null || recruitTypeDetails.isEmpty()
108+
? null
109+
: memberActivity.recruitTypeDetail.in(recruitTypeDetails);
110+
}
111+
}

src/main/java/org/ject/support/domain/member/repository/MemberActivityRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.springframework.stereotype.Repository;
99

1010
@Repository
11-
public interface MemberActivityRepository extends JpaRepository<MemberActivity, Long> {
11+
public interface MemberActivityRepository extends JpaRepository<MemberActivity, Long>, MemberActivityQueryRepository {
1212

1313
@Query("""
1414
select count(ma) > 0

0 commit comments

Comments
 (0)