Skip to content

Commit bac68b5

Browse files
committed
feat: update service and saver
1 parent 8987c9b commit bac68b5

3 files changed

Lines changed: 74 additions & 15 deletions

File tree

src/main/java/com/itasocialacademy/oitassist/participation/components/saver/ApplicationDecisionsSaver.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,3 @@ public Application saveRejectedApplication(Long organizerId, Application applica
4646
return applicationRepository.save(application);
4747
}
4848
}
49-

src/main/java/com/itasocialacademy/oitassist/participation/service/ApplicationServiceImpl.java

Lines changed: 65 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
import com.itasocialacademy.oitassist.core.exceptions.AuthorizationException;
1313
import com.itasocialacademy.oitassist.participation.components.saver.ApplicationDecisionsSaver;
1414
import 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;
1617
import com.itasocialacademy.oitassist.participation.dao.dto.request.RejectEnrollmentRequest;
1718
import com.itasocialacademy.oitassist.participation.dao.dto.response.*;
1819
import 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) {
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
package com.itasocialacademy.oitassist.participation.service.interfaces;
22

3-
import com.itasocialacademy.oitassist.participation.dao.dto.request.AcceptApplicationsRequest;
3+
import com.itasocialacademy.oitassist.participation.dao.dto.request.AcceptApplicationListRequest;
4+
import com.itasocialacademy.oitassist.participation.dao.dto.request.RejectApplicationListRequest;
45
import com.itasocialacademy.oitassist.participation.dao.dto.response.AcceptedApplicationListResponse;
56
import com.itasocialacademy.oitassist.participation.dao.dto.response.ApplicationListItemResponse;
67
import com.itasocialacademy.oitassist.participation.dao.dto.response.EnrollmentResponse;
8+
import com.itasocialacademy.oitassist.participation.dao.dto.response.RejectedApplicationListResponse;
79

810
public interface ApplicationService extends EnrollmentService<ApplicationListItemResponse> {
911
EnrollmentResponse sendApplicationRequest(Long competitionId, Long stageId);
1012

1113
AcceptedApplicationListResponse acceptApplications(
12-
AcceptApplicationsRequest request,
14+
AcceptApplicationListRequest request,
15+
Long competitionId,
16+
Long stageId);
17+
18+
RejectedApplicationListResponse rejectApplications(
19+
RejectApplicationListRequest request,
1320
Long competitionId,
1421
Long stageId);
1522
}

0 commit comments

Comments
 (0)