11package clap .server .adapter .outbound .persistense .repository .task ;
22
33import clap .server .adapter .inbound .web .dto .task .FilterTaskListRequest ;
4+ import clap .server .adapter .inbound .web .dto .task .request .FilterTaskBoardRequest ;
45import clap .server .adapter .outbound .persistense .entity .task .TaskEntity ;
56import clap .server .adapter .outbound .persistense .entity .task .constant .TaskStatus ;
67import com .querydsl .core .BooleanBuilder ;
78import com .querydsl .core .types .OrderSpecifier ;
89import com .querydsl .core .types .dsl .DateTimePath ;
910import com .querydsl .jpa .impl .JPAQueryFactory ;
1011import lombok .RequiredArgsConstructor ;
11- import org .springframework .data .domain .Page ;
12- import org .springframework .data .domain .PageImpl ;
13- import org .springframework .data .domain .Pageable ;
12+ import lombok .extern .slf4j .Slf4j ;
13+ import org .springframework .data .domain .*;
1414import org .springframework .stereotype .Repository ;
1515
1616import java .time .LocalDateTime ;
1919import static clap .server .adapter .outbound .persistense .entity .task .QTaskEntity .taskEntity ;
2020import static com .querydsl .core .types .Order .*;
2121
22+ @ Slf4j
2223@ Repository
2324@ RequiredArgsConstructor
2425public class TaskCustomRepositoryImpl implements TaskCustomRepository {
@@ -69,6 +70,47 @@ public Page<TaskEntity> findAllTasks(Pageable pageable, FilterTaskListRequest fi
6970 return getTasksPage (pageable , whereClause , filterTaskListRequest .orderRequest ().sortBy (), filterTaskListRequest .orderRequest ().sortDirection ());
7071 }
7172
73+ @ Override
74+ public List <TaskEntity > findTasksByFilter (Long processorId , List <TaskStatus > statuses , LocalDateTime untilDateTime , FilterTaskBoardRequest request , Pageable pageable ) {
75+ BooleanBuilder whereClause = createTaskBoardFilter (processorId , statuses , untilDateTime , request );
76+ return queryFactory
77+ .selectFrom (taskEntity )
78+ .where (whereClause )
79+ .orderBy (taskEntity .processorOrder .asc ())
80+ .limit (pageable .getPageSize () + 1 )
81+ .offset (pageable .getOffset ())
82+ .fetch ();
83+ }
84+
85+ private BooleanBuilder createTaskBoardFilter (Long processorId , List <TaskStatus > statuses , LocalDateTime untilDateTime , FilterTaskBoardRequest request ) {
86+ BooleanBuilder whereClause = new BooleanBuilder ();
87+
88+ whereClause .and (taskEntity .processor .memberId .eq (processorId ));
89+ whereClause .and (taskEntity .taskStatus .in (statuses ));
90+ whereClause .and (taskEntity .finishedAt .isNull ().or (taskEntity .finishedAt .loe (untilDateTime )));
91+
92+ if (request .labelId () != null ) {
93+ whereClause .and (taskEntity .label .labelId .eq (request .labelId ()));
94+ }
95+ if (request .mainCategoryId () != null ) {
96+ whereClause .and (taskEntity .category .mainCategory .categoryId .eq (request .mainCategoryId ()));
97+ }
98+ if (request .subCategoryId () != null ) {
99+ whereClause .and (taskEntity .category .categoryId .eq (request .subCategoryId ()));
100+ }
101+ if (request .title () != null && !request .title ().isEmpty ()) {
102+ String titleFilter = "%" + request .title () + "%" ;
103+ whereClause .and (taskEntity .title .like (titleFilter ));
104+ }
105+ if (request .requesterNickname () != null && !request .requesterNickname ().isEmpty ()) {
106+ String nicknameFilter = "%" + request .requesterNickname ().toLowerCase () + "%" ;
107+ whereClause .and (taskEntity .requester .nickname .lower ().like (nicknameFilter ));
108+
109+ }
110+
111+ return whereClause ;
112+ }
113+
72114 private BooleanBuilder createFilter (FilterTaskListRequest request ) {
73115 BooleanBuilder whereClause = new BooleanBuilder ();
74116 if (request .term () != null ) {
@@ -90,6 +132,7 @@ private BooleanBuilder createFilter(FilterTaskListRequest request) {
90132 return whereClause ;
91133 }
92134
135+
93136 private Page <TaskEntity > getTasksPage (Pageable pageable , BooleanBuilder whereClause , String sortBy , String sortDirection ) {
94137 OrderSpecifier <?> orderSpecifier = getOrderSpecifier (sortBy , sortDirection );
95138
0 commit comments