@@ -5,10 +5,11 @@ import com.example.jhouse_server.admin.anaylsis.dto.AnalysisJoinPathResponse
5
5
import com.example.jhouse_server.admin.user.dto.AdminAgentSearch
6
6
import com.example.jhouse_server.admin.user.dto.AdminUserList
7
7
import com.example.jhouse_server.admin.user.dto.AdminUserWithdrawalSearch
8
- import com.example.jhouse_server.admin .user.dto.QAdminUserList
8
+ import com.example.jhouse_server.domain .user.entity.Age
9
9
import com.example.jhouse_server.domain.user.entity.Authority
10
10
import com.example.jhouse_server.domain.user.entity.QUser.user
11
11
import com.example.jhouse_server.domain.user.entity.QUserJoinPath.userJoinPath
12
+ import com.example.jhouse_server.domain.user.entity.QUserTerm.userTerm
12
13
import com.example.jhouse_server.domain.user.entity.User
13
14
import com.example.jhouse_server.domain.user.entity.UserType.NONE
14
15
import com.example.jhouse_server.domain.user.entity.WithdrawalStatus.WAIT
@@ -19,6 +20,9 @@ import com.example.jhouse_server.domain.user.repository.dto.AdminUserAnalysisAge
19
20
import com.example.jhouse_server.domain.user.repository.dto.AdminUserAnalysisJoinPathResult
20
21
import com.example.jhouse_server.domain.user.repository.dto.QAdminUserAnalysisAgeResult
21
22
import com.example.jhouse_server.domain.user.repository.dto.QAdminUserAnalysisJoinPathResult
23
+ import com.querydsl.core.group.GroupBy
24
+ import com.querydsl.core.group.GroupBy.groupBy
25
+ import com.querydsl.core.types.Projections
22
26
import com.querydsl.core.types.dsl.BooleanExpression
23
27
import com.querydsl.jpa.impl.JPAQueryFactory
24
28
import org.springframework.data.domain.Page
@@ -139,27 +143,65 @@ class UserRepositoryImpl(
139
143
adminUserSearch : AdminUserWithdrawalSearch ,
140
144
pageable : Pageable
141
145
): Page <AdminUserList > {
142
- val result = jpaQueryFactory.select(
143
- QAdminUserList (
146
+ val result = jpaQueryFactory.selectFrom(user)
147
+ .leftJoin(userJoinPath).on(user.id.eq(userJoinPath.user.id))
148
+ .leftJoin(userTerm).on(user.id.eq(userTerm.user.id))
149
+ .where(searchUserFilter(adminUserSearch), user.authority.eq(Authority .USER ))
150
+ .offset(pageable.offset)
151
+ .limit(pageable.pageSize.toLong())
152
+ .transform(groupBy(user.id).list( Projections .constructor (
153
+ AdminUserList ::class .java,
144
154
user.id,
145
155
user.nickName,
146
156
user.email,
147
157
user.userType,
148
158
user.phoneNum,
149
159
user.createdAt,
150
- user.age
160
+ user.age.stringValue(),
161
+ GroupBy .set(
162
+ userJoinPath.joinPath.stringValue()
163
+ ),
164
+ GroupBy .set(
165
+ userTerm.term.stringValue()
166
+ )
167
+ )))
168
+
169
+ val map = mutableMapOf<Long , AdminUserList >()
170
+ // result의 아이템 중 age, joinPath, term enum의 value로 치환하고 싶어.
171
+ result.forEach{
172
+ val userId = it.id
173
+ val age = Age .valueOf(it.age)
174
+ val transformedJoinPath = it.getJoinPathValues().distinct().toSet() ? : it.joinPath
175
+ val transformedTerm = it.getTermValues().distinct().toSet() ? : it.term
176
+ // map에 userId가 이미 있다면, 해당 userId의 AdminUserList를 가져와서 joinPath, term을 추가하고 다시 map에 넣어줘.
177
+ if (map.containsKey(userId)){
178
+ val adminUserList = map[userId]
179
+ adminUserList?.joinPath?.plusElement(transformedJoinPath)
180
+ adminUserList?.term?.plusElement(transformedTerm)
181
+ return @forEach
182
+ }
183
+ map[userId] = AdminUserList (
184
+ it.id,
185
+ it.nickName,
186
+ it.email,
187
+ it.userType,
188
+ it.phoneNum,
189
+ it.createdAt,
190
+ age.value,
191
+ transformedJoinPath,
192
+ transformedTerm
151
193
)
152
- ).from(user)
153
- .where(searchUserFilter(adminUserSearch))
154
- .offset(pageable.offset)
155
- .limit(pageable.pageSize.toLong())
156
- .fetch()
194
+ }
195
+ // map의 value만 뽑아서 list로 만들어서 반환해줘.
196
+ val transformedResult = map.values.toList()
157
197
158
198
val countQuery = jpaQueryFactory
159
199
.selectFrom(user)
200
+ .leftJoin(userJoinPath).on(user.id.eq(userJoinPath.user.id))
201
+ .leftJoin(userTerm).on(user.id.eq(userTerm.user.id))
160
202
.where(searchUserFilter(adminUserSearch))
161
203
.fetch().size.toLong()
162
- return PageImpl (result , pageable, countQuery)
204
+ return PageImpl (transformedResult , pageable, countQuery)
163
205
}
164
206
/* *
165
207
* ============================================================================================
0 commit comments