-
Notifications
You must be signed in to change notification settings - Fork 296
/
Copy pathPaySession.java
82 lines (65 loc) · 2.94 KB
/
PaySession.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
74
75
76
77
78
79
80
81
82
package nextstep.courses.domain;
import nextstep.courses.domain.exception.LackPointException;
import nextstep.courses.domain.exception.NotRecruitException;
import nextstep.payments.domain.Payment;
import nextstep.users.domain.NsUser;
import java.util.List;
import java.util.Set;
public class PaySession extends Session {
private final int maximumStudents;
private final long amount;
public PaySession(Long id, List<SessionImage> sessionImage, RecruitStatus recruitStatus, SessionDate sessionDate, int maximumStudents, long amount) {
super(id, sessionImage, recruitStatus, sessionDate);
assertValidMaximumStudents(maximumStudents);
assertValidAmount(amount);
this.amount = amount;
this.maximumStudents = maximumStudents;
}
public PaySession(Long id, List<SessionImage> sessionImage, RecruitStatus recruitStatus, SessionDate sessionDate, Set<NsUser> students, int maximumStudents, long amount) {
super(id, sessionImage, recruitStatus, sessionDate, students);
assertValidMaximumStudents(maximumStudents);
assertValidAmount(amount);
this.amount = amount;
this.maximumStudents = maximumStudents;
}
public PaySession(Long id, List<SessionImage> sessionImage, RecruitStatus recruitStatus, SessionProgressStatus sessionProgressStatus, SessionDate sessionDate, Set<NsUser> students, Set<NsUser> approveStudents, int maximumStudents, long amount) {
super(id, sessionImage, recruitStatus, sessionProgressStatus, sessionDate, students, approveStudents);
assertValidMaximumStudents(maximumStudents);
assertValidAmount(amount);
this.amount = amount;
this.maximumStudents = maximumStudents;
}
private void assertValidMaximumStudents(int maximumStudents) {
String errorMessage = "최대 수강생은 1명 이상으로 등록해야 합니다.";
if (maximumStudents <= 0) {
throw new IllegalArgumentException(errorMessage);
}
}
private void assertValidAmount(long amount) {
String errorMessage = "가격이 0원이 될 수 없습니다.";
if (amount <= 0) {
throw new IllegalArgumentException(errorMessage);
}
}
public int getMaximumStudents() {
return maximumStudents;
}
public long getAmount() {
return amount;
}
@Override
public void assertSatisfiedCondition(NsUser user, Payment payment) {
if (getStudents().size() == maximumStudents) {
throw new NotRecruitException();
}
if (payment.getSessionId() == null || !payment.getSessionId().equals(getId())) {
throw new NotRecruitException();
}
if (payment.getNsUserId() == null || !payment.getNsUserId().equals(user.getId())) {
throw new NotRecruitException();
}
if (payment.getAmount() == null || payment.getAmount() < amount) {
throw new LackPointException();
}
}
}