-
Notifications
You must be signed in to change notification settings - Fork 297
/
Copy pathFreeLecture.java
108 lines (92 loc) · 3.44 KB
/
FreeLecture.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package nextstep.courses.domain.lectures;
import java.time.LocalDateTime;
import nextstep.courses.BaseTime;
import nextstep.courses.domain.coverimage.CoverImage;
import nextstep.courses.domain.Students;
import nextstep.courses.domain.coverimage.CoverImages;
import nextstep.users.domain.NsUser;
public class FreeLecture extends BaseTime implements Lecture {
private final LectureType lectureType = LectureType.FREE;
private final Long id;
private final String title;
private final CoverImages coverImages = new CoverImages();
private final LectureStatus lectureStatus;
private final LectureRecruitingStatus lectureRecruitingStatus;
private final RegistrationPeriod registrationPeriod;
private final Students students = Students.defaultOf(); // 강의 기본정보와는 다름
// primary constructor
public FreeLecture(Long id, String title, CoverImages coverImages,
LectureRecruitingStatus lectureRecruitingStatus, LectureStatus lectureStatus,
RegistrationPeriod registrationPeriod, LocalDateTime createdAt, LocalDateTime updatedAt) {
super(createdAt, updatedAt);
this.id = id;
this.title = title;
this.coverImages.addAll(coverImages);
this.lectureStatus = lectureStatus;
this.lectureRecruitingStatus = lectureRecruitingStatus;
this.registrationPeriod = registrationPeriod;
}
public FreeLecture(Long id, String title, CoverImages coverImages,
LectureRecruitingStatus lectureRecruitingStatus,
RegistrationPeriod registrationPeriod) {
this(id, title, coverImages, lectureRecruitingStatus, LectureStatus.YET, registrationPeriod,
LocalDateTime.now(), null);
}
public FreeLecture(Long id, String title, CoverImages coverImages, LectureStatus lectureStatus,
LectureRecruitingStatus lectureRecruitingStatus,
RegistrationPeriod registrationPeriod) {
this(id, title, coverImages, lectureRecruitingStatus, lectureStatus, registrationPeriod,
LocalDateTime.now(), null);
}
@Override
public boolean isFree() {
return lectureType.isFree();
}
@Override
public boolean isRecruiting() {
return this.lectureRecruitingStatus.isRecruiting();
}
@Override
public void canEnrollment(NsUser nsUser, Students selectedStudents) {
if (!isRecruiting()) {
throw new IllegalArgumentException("모집중이지 않습니다.");
}
if (selectedStudents.contain(nsUser)) {
throw new IllegalArgumentException("선발된 인원만 수강신청이 가능합니다.");
}
}
@Override
public void enrollment(NsUser nsUser, Students selectedStudents) {
this.canEnrollment(nsUser, selectedStudents);
this.students.add(nsUser);
}
@Override
public Lecture recruitingStart() {
return new FreeLecture(this.id, this.title, this.coverImages,
LectureRecruitingStatus.RECRUITING, this.registrationPeriod);
}
@Override
public Lecture start() {
return new FreeLecture(this.id, this.title, this.coverImages, LectureStatus.DOING,
LectureRecruitingStatus.RECRUITING, this.registrationPeriod);
}
@Override
public Integer numberOfStudent() {
return students.size();
}
public LectureEntity toEntity() {
return new LectureEntity(
this.id
, this.title
, this.coverImages
, this.lectureType
, this.lectureStatus
, this.lectureRecruitingStatus
, this.registrationPeriod
, null
, null
, super.getCreatedAt()
, super.getUpdatedAt()
);
}
}