11package es .princip .getp .persistence .adapter .project .apply ;
22
3+ import com .querydsl .core .types .dsl .BooleanExpression ;
34import es .princip .getp .application .project .apply .port .out .CountProjectApplicationPort ;
5+ import es .princip .getp .domain .project .apply .model .ProjectApplicationStatus ;
46import es .princip .getp .domain .project .commission .model .ProjectId ;
57import es .princip .getp .persistence .adapter .project .apply .model .QProjectApplicationJpaEntity ;
68import es .princip .getp .persistence .adapter .project .apply .model .QTeammateJpaEntity ;
@@ -23,15 +25,29 @@ class CountProjectApplicationAdapter extends QueryDslSupport implements CountPro
2325 = QProjectApplicationJpaEntity .projectApplicationJpaEntity ;
2426 private static final QTeammateJpaEntity teammate = QTeammateJpaEntity .teammateJpaEntity ;
2527
28+ private static final ProjectApplicationStatus [] statusesWithoutPendingTeamApproval
29+ = Arrays .stream (ProjectApplicationStatus .values ())
30+ .filter (status -> !status .equals (PENDING_TEAM_APPROVAL ))
31+ .toArray (ProjectApplicationStatus []::new );
32+
33+ private static BooleanExpression applicationStatusNePendingTeamApproval () {
34+ return application .status .in (statusesWithoutPendingTeamApproval );
35+ }
36+
37+ private static BooleanExpression teammateApplicationStatusNePendingTeamApproval () {
38+ return teammate .application .status .in (statusesWithoutPendingTeamApproval );
39+ }
40+
2641 @ Override
2742 public Map <ProjectId , Long > countBy (final ProjectId ... projectId ) {
2843 final Long [] ids = Arrays .stream (projectId )
2944 .map (ProjectId ::getValue )
3045 .toArray (Long []::new );
46+
3147 final Map <ProjectId , Long > counts = queryFactory .select (application .projectId , application .count ())
3248 .from (application )
3349 .where (application .projectId .in (ids )
34- .and (application . status . ne ( PENDING_TEAM_APPROVAL )))
50+ .and (applicationStatusNePendingTeamApproval ( )))
3551 .groupBy (application .projectId )
3652 .fetch ()
3753 .stream ()
@@ -40,10 +56,11 @@ public Map<ProjectId, Long> countBy(final ProjectId... projectId) {
4056 tuple -> Optional .ofNullable (tuple .get (application .count ()))
4157 .orElse (0L )
4258 ));
59+
4360 queryFactory .select (teammate .application .projectId , teammate .count ())
4461 .from (teammate )
4562 .where (teammate .application .projectId .in (ids )
46- .and (teammate . application . status . ne ( PENDING_TEAM_APPROVAL )))
63+ .and (teammateApplicationStatusNePendingTeamApproval ( )))
4764 .groupBy (teammate .application .projectId )
4865 .fetch ()
4966 .forEach (tuple -> {
@@ -52,6 +69,7 @@ public Map<ProjectId, Long> countBy(final ProjectId... projectId) {
5269 .orElse (0L );
5370 counts .put (key , counts .getOrDefault (key , 0L ) + value );
5471 });
72+
5573 return counts ;
5674 }
5775
@@ -60,13 +78,15 @@ public Long countBy(final ProjectId projectId) {
6078 Long count = queryFactory .select (application .count ())
6179 .from (application )
6280 .where (application .projectId .eq (projectId .getValue ())
63- .and (application . status . ne ( PENDING_TEAM_APPROVAL )))
81+ .and (applicationStatusNePendingTeamApproval ( )))
6482 .fetchOne ();
83+
6584 count += queryFactory .select (teammate .count ())
6685 .from (teammate )
6786 .where (teammate .application .projectId .eq (projectId .getValue ())
68- .and (teammate . application . status . ne ( PENDING_TEAM_APPROVAL )))
87+ .and (teammateApplicationStatusNePendingTeamApproval ( )))
6988 .fetchOne ();
89+
7090 return count ;
7191 }
7292}
0 commit comments