-
Notifications
You must be signed in to change notification settings - Fork 295
/
Copy pathSession.java
73 lines (64 loc) · 2.63 KB
/
Session.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package nextstep.courses.domain;
import java.util.List;
import nextstep.courses.exception.SessionException;
import nextstep.courses.exception.SessionException.SessionFeeNotEqualException;
import nextstep.courses.exception.SessionException.SessionFullException;
import nextstep.courses.exception.SessionException.SessionNotOpenException;
import nextstep.users.domain.NsUser;
public class Session {
private final Long sessionId;
private final String sessionName;
private final Period sessionPeriod;
private final Thumbnail thumbnail;
private final SessionType sessionType;
private final SessionStatus sessionStatus;
public Session(Long sessionId, String sessionName, Period sessionPeriod, Thumbnail thumbnail,
SessionType sessionType, SessionStatus sessionStatus) {
this.sessionId = sessionId;
this.sessionName = sessionName;
this.sessionPeriod = sessionPeriod;
this.thumbnail = thumbnail;
this.sessionType = sessionType;
this.sessionStatus = sessionStatus;
}
public boolean isEnrollmentPossible(SessionStudents students, Integer sessionFee) {
if (!isRecruiting()) {
throw new SessionNotOpenException("강의가 모집중인 상태가 아닙니다.");
}
if (!isWithinCapacity(students)) {
throw new SessionFullException("강의의 수용인원이 다 찼습니다.");
}
if (!checkSessionFeeEquality(sessionFee)) {
throw new SessionFeeNotEqualException("접수하신 수강료가 강의 수강료와 일치하지 않습니다.");
}
return true;
}
protected boolean isRecruiting() {
return sessionStatus == SessionStatus.RECRUITING;
}
protected boolean isWithinCapacity(SessionStudents students) {
return students.isWithinCapacity(this.sessionType);
}
protected boolean checkSessionFeeEquality(Integer sessionFee) {
return this.sessionType.checkSessionFeeEquality(sessionFee);
}
public Student enroll(SessionStudents students, NsUser user) {
Student student = new Student(this.sessionId, user.getId());
students.enroll(student);
return student;
}
public Long getSessionId() {
return sessionId;
}
@Override
public String toString() {
return "Session{" +
"sessionId=" + sessionId +
", sessionName='" + sessionName + '\'' +
", sessionPeriod=" + sessionPeriod +
", thumbnail=" + thumbnail +
", sessionType=" + sessionType +
", sessionStatus=" + sessionStatus +
'}';
}
}