1212import com .itasocialacademy .oitassist .core .exceptions .AuthorizationException ;
1313import com .itasocialacademy .oitassist .participation .components .saver .ApplicationDecisionsSaver ;
1414import com .itasocialacademy .oitassist .participation .dao .dto .event .ApplicationDecisionEvent ;
15- import com .itasocialacademy .oitassist .participation .dao .dto .request .AcceptApplicationsRequest ;
15+ import com .itasocialacademy .oitassist .participation .dao .dto .request .AcceptApplicationListRequest ;
16+ import com .itasocialacademy .oitassist .participation .dao .dto .request .RejectApplicationListRequest ;
1617import com .itasocialacademy .oitassist .participation .dao .dto .request .RejectEnrollmentRequest ;
1718import com .itasocialacademy .oitassist .participation .dao .dto .response .*;
1819import com .itasocialacademy .oitassist .participation .dao .enums .RequestStatus ;
@@ -106,15 +107,14 @@ public ProcessApplicationResponse acceptRequest(Long applicationId) {
106107
107108 @ Override
108109 public AcceptedApplicationListResponse acceptApplications (
109- AcceptApplicationsRequest request ,
110+ AcceptApplicationListRequest request ,
110111 Long competitionId ,
111112 Long stageId ) {
112113 Long userId = getCurrentUserIdOrThrow ();
113114 List <Long > applicationIds = validateNoDuplicatesOrThrow (request .applicationIds ());
114115
115116 List <Application > applications = applicationRepository .findAll (
116- ApplicationSpecification .applicationIdIn (applicationIds )
117- );
117+ ApplicationSpecification .applicationIdIn (applicationIds ));
118118 List <SucceededApplicationAcceptingItemResponse > succeeded = new ArrayList <>();
119119 List <FailedApplicationDecisionItemResponse > failed = new ArrayList <>();
120120
@@ -126,31 +126,36 @@ public AcceptedApplicationListResponse acceptApplications(
126126 for (Application application : applications ) {
127127 if (application .getStatus () != PENDING_STATUS ) {
128128 failed .add (new FailedApplicationDecisionItemResponse (
129- application .getId (), "Application is not pending" )
130- );
129+ application .getId (), "Application is not pending" ));
131130 continue ;
132131 }
133132 try {
134133 Participation savedParticipation = applicationSaver .saveAcceptedApplicationData (
135134 userId , application , competitionId , stageId );
136135 succeeded .add (new SucceededApplicationAcceptingItemResponse (
137- application .getId (), savedParticipation .getUserId ())
138- );
136+ application .getId (), savedParticipation .getUserId (), RequestStatus .ACCEPTED ));
139137 } catch (DataIntegrityViolationException e ) {
140138 if (isUniqueParticipationConstraint (e )) {
141139 failed .add (new FailedApplicationDecisionItemResponse (
142- application .getId (), "Application already has a participation record" )
143- );
140+ application .getId (), "Application already has a participation record" ));
144141 } else {
145142 throw new UnexpectedConstraintViolationException (
146143 "Unexpected database constraint violation while accepting application" ,
147144 ErrorCode .DATA_ACCESS_ERROR , e );
148145 }
149146 }
150147 }
148+ AcceptedApplicationListResponse response = AcceptedApplicationListResponse .builder ()
149+ .application (new ApplicationDecisionSummary (competitionId , stageId , userId , Instant .now ()))
150+ .succeeded (succeeded )
151+ .failed (failed )
152+ .build ();
153+
154+ if (!succeeded .isEmpty ()) {
151155
152- return new AcceptedApplicationListResponse (
153- succeeded , failed );
156+ }
157+
158+ return response ;
154159 }
155160
156161 @ Override
@@ -174,6 +179,54 @@ public ProcessApplicationResponse rejectRequest(Long applicationId, RejectEnroll
174179 return response ;
175180 }
176181
182+ @ Override
183+ public RejectedApplicationListResponse rejectApplications (
184+ RejectApplicationListRequest request ,
185+ Long competitionId ,
186+ Long stageId ) {
187+ Long userId = getCurrentUserIdOrThrow ();
188+ List <Long > applicationIds = validateNoDuplicatesOrThrow (request .applicationIds ());
189+
190+ List <Application > applications = applicationRepository .findAll (
191+ ApplicationSpecification .applicationIdIn (applicationIds ));
192+ List <SucceededApplicationRejectingItemResponse > succeeded = new ArrayList <>();
193+ List <FailedApplicationDecisionItemResponse > failed = new ArrayList <>();
194+
195+ Set <Long > foundIds = applications .stream ().map (Application ::getId ).collect (Collectors .toSet ());
196+ applicationIds .stream ()
197+ .filter (id -> !foundIds .contains (id ))
198+ .forEach (id -> failed .add (new FailedApplicationDecisionItemResponse (id , "Application not found" )));
199+
200+ for (Application application : applications ) {
201+ if (application .getStatus () != PENDING_STATUS ) {
202+ failed .add (new FailedApplicationDecisionItemResponse (
203+ application .getId (), "Application is not pending" ));
204+ continue ;
205+ }
206+ try {
207+ Application savedApplication = applicationSaver .saveRejectedApplication (
208+ userId , application , request .rejectionReason ());
209+ succeeded .add (new SucceededApplicationRejectingItemResponse (
210+ savedApplication .getId (), RequestStatus .REJECTED ));
211+ } catch (DataIntegrityViolationException e ) {
212+ throw new UnexpectedConstraintViolationException (
213+ "Unexpected database constraint violation while accepting application" ,
214+ ErrorCode .DATA_ACCESS_ERROR , e );
215+ }
216+ }
217+ RejectedApplicationListResponse response = RejectedApplicationListResponse .builder ()
218+ .application (new ApplicationDecisionSummary (competitionId , stageId , userId , Instant .now ()))
219+ .succeeded (succeeded )
220+ .failed (failed )
221+ .build ();
222+
223+ if (!succeeded .isEmpty ()) {
224+
225+ }
226+
227+ return response ;
228+ }
229+
177230 @ Override
178231 @ Transactional
179232 public ProcessApplicationResponse cancelRequest (Long applicationId ) {
0 commit comments