-
Notifications
You must be signed in to change notification settings - Fork 291
/
Copy pathEnrolmentController.java
53 lines (41 loc) · 1.87 KB
/
EnrolmentController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package nextstep.enrolment.controller;
import nextstep.courses.domain.Course;
import nextstep.enrolment.facade.EnrolmentFacade;
import nextstep.payments.domain.Payment;
import nextstep.sessions.domain.Session;
import nextstep.sessions.dto.SessionResponse;
import nextstep.sessions.dto.SessionsResponse;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class EnrolmentController {
private final EnrolmentFacade enrolmentFacade;
public EnrolmentController(EnrolmentFacade enrolmentFacade) {
this.enrolmentFacade = enrolmentFacade;
}
public SessionsResponse findPossibleSessionList(int cardinalNumber) {
Course course = enrolmentFacade.findCourseByCardinalNumber(cardinalNumber);
return new SessionsResponse(course.getPossibleSessionList().stream()
.map(SessionResponse::of)
.collect(Collectors.toList()));
}
public SessionResponse findSessionInfo(long sessionId) {
Session session = enrolmentFacade.findSessionById(sessionId);
return SessionResponse.of(session);
}
public void enrollCourse(Long sessionId, Long nsUserId) {
Session session = enrolmentFacade.findSessionById(sessionId);
if (!session.isRecruitingStatus()) {
throw new IllegalArgumentException("수강 신청이 불가능한 강의 입니다.");
}
List<Payment> payments = enrolmentFacade.findPaymentsBySessionId(sessionId);
Payment payment = payments.stream().filter(p -> Objects.equals(p.nsUserId(), nsUserId))
.findAny()
.orElse(null);
if (Objects.nonNull(payment) && !session.isPossibleToRegister(payment.amount(), payments.size())) {
//수강 신청 불가
throw new IllegalArgumentException("수강 신청이 불가능합니다.");
}
//수강 신청
}
}