Skip to content

Commit 3a8fe13

Browse files
committed
feature/KD-41-domain: Schedule 도메인 엔티티 설계
1 parent e2cce49 commit 3a8fe13

11 files changed

Lines changed: 77 additions & 22 deletions

File tree

aics-domain/src/main/java/kgu/developers/domain/schedule/application/command/ScheduleService.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package kgu.developers.domain.schedule.application.command;
22

3+
import com.sun.jdi.request.DuplicateRequestException;
34
import kgu.developers.domain.schedule.domain.Schedule;
45
import kgu.developers.domain.schedule.domain.ScheduleRepository;
56
import kgu.developers.domain.schedule.domain.SubmissionType;
@@ -14,21 +15,29 @@
1415
public class ScheduleService {
1516
private final ScheduleRepository scheduleRepository;
1617

17-
public Long createScheduleManagement(SubmissionType submissionType, String title, LocalDateTime startDate, LocalDateTime endDate) {
18-
Schedule schedule = Schedule.create(submissionType,title,startDate,endDate);
18+
public Long createSchedule(SubmissionType submissionType, String title, String content , LocalDateTime startDate, LocalDateTime endDate) {
19+
scheduleRepository.findBySubmissionTyp(submissionType).ifPresent(existing -> {
20+
throw new DuplicateRequestException();
21+
});
22+
Schedule schedule = Schedule.create(submissionType,title,content,startDate,endDate);
1923

2024
return scheduleRepository.save(schedule).getId();
2125
}
2226
@Transactional
23-
public void updateScheduleManagement(Schedule schedule, SubmissionType submissionType , String title, LocalDateTime startDate, LocalDateTime endDate) {
27+
public void updateSchedule(Schedule schedule, SubmissionType submissionType , String title, LocalDateTime startDate, LocalDateTime endDate) {
2428
schedule.updateSubmissionType(submissionType);
2529
schedule.updateTitle(title);
2630
schedule.updateStartDate(startDate);
2731
schedule.updateEndDate(endDate);
2832

2933
scheduleRepository.save(schedule);
3034
}
31-
public void deleteScheduleManagement(Long id) {
35+
@Transactional
36+
public void updateScheduleContent(Schedule schedule, String content) {
37+
schedule.updateContent(content);
38+
scheduleRepository.save(schedule);
39+
}
40+
public void deleteSchedule(Long id) {
3241
scheduleRepository.deleteById(id);
3342
}
3443

aics-domain/src/main/java/kgu/developers/domain/schedule/application/query/ScheduleQueryService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public Schedule getScheduleManagement(Long id) {
2323
.findById(id)
2424
.orElseThrow(ScheduleNotFoundException::new);
2525
}
26-
public List<Schedule> findBySubmissionType(SubmissionType submissionType) {
27-
return scheduleRepository.findBySubmissionType(submissionType);
26+
public Schedule getBySubmissionType(SubmissionType submissionType) {
27+
return scheduleRepository.findBySubmissionTyp(submissionType)
28+
.orElseThrow(ScheduleNotFoundException::new);
2829
}
2930
}

aics-domain/src/main/java/kgu/developers/domain/schedule/domain/Schedule.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,43 @@
1313
@AllArgsConstructor
1414
public class Schedule {
1515

16-
private long id;
16+
private Long id;
1717
private SubmissionType submissionType;
1818
private String title;
19+
private String content;
1920
private LocalDateTime startDate;
2021
private LocalDateTime endDate;
22+
2123
private LocalDateTime createdAt;
2224
private LocalDateTime updatedAt;
2325
private LocalDateTime deletedAt;
2426

2527

26-
public static Schedule create(SubmissionType submissionType, String title, LocalDateTime startDate, LocalDateTime endDate) {
28+
public static Schedule create(SubmissionType submissionType, String title,String content, LocalDateTime startDate, LocalDateTime endDate) {
2729
return Schedule.builder()
2830
.submissionType(submissionType)
2931
.title(title)
32+
.content(content)
3033
.startDate(startDate)
3134
.endDate(endDate)
3235
.build();
3336
}
37+
public ScheduleStatus statusAt(LocalDateTime referenceTime) {
38+
if (referenceTime.isBefore(startDate)) {
39+
return ScheduleStatus.PENDING;
40+
}
41+
if (referenceTime.isAfter(endDate)) {
42+
return ScheduleStatus.CLOSED;
43+
}
44+
return ScheduleStatus.IN_PROGRESS;
45+
}
3446
public void updateSubmissionType(SubmissionType submissionType) {
3547
this.submissionType = submissionType;
3648
}
3749
public void updateTitle(String title) {
3850
this.title = title;
3951
}
52+
public void updateContent(String content) {this.content = content;}
4053
public void updateStartDate(LocalDateTime startDate) {
4154
this.startDate = startDate;
4255
}

aics-domain/src/main/java/kgu/developers/domain/schedule/domain/ScheduleRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ public interface ScheduleRepository {
88
void deleteById(Long id);
99
Optional<Schedule> findById(Long id);
1010
List<Schedule> findAll();
11-
List<Schedule> findBySubmissionType(SubmissionType submissionType);
11+
Optional<Schedule> findBySubmissionTyp(SubmissionType submissionType);
1212
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package kgu.developers.domain.schedule.domain;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@Getter
7+
@RequiredArgsConstructor
8+
public enum ScheduleStatus {
9+
PENDING("대기"),
10+
IN_PROGRESS("진행 중"),
11+
CLOSED("마감")
12+
;
13+
private final String label;
14+
}

aics-domain/src/main/java/kgu/developers/domain/schedule/domain/SubmissionType.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
@Getter
77
@RequiredArgsConstructor
88
public enum SubmissionType {
9+
SUBMITTED("신청접수"),
910
MIDTHESIS("중간논문"),
1011
FINALTHESIS("최종논문"),
11-
CERTIFICATE("자격증")
12+
CERTIFICATE("자격증"),
13+
APPROVED("최종 통과"),
14+
OTHER("기타")
1215
;
1316
private final String label;
1417
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package kgu.developers.domain.schedule.exception;
2+
3+
import kgu.developers.common.exception.CustomException;
4+
5+
import static kgu.developers.domain.schedule.exception.ScheduleDomainExceptionCode.DUPLICATE_SCHEDULE_TYPE;
6+
7+
public class DuplicateScheduleTypeException extends CustomException {
8+
public DuplicateScheduleTypeException() {super(DUPLICATE_SCHEDULE_TYPE);}
9+
}

aics-domain/src/main/java/kgu/developers/domain/schedule/exception/ScheduleDomainExceptionCode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import lombok.Getter;
66
import org.springframework.http.HttpStatus;
77

8+
import static org.springframework.http.HttpStatus.BAD_REQUEST;
89
import static org.springframework.http.HttpStatus.NOT_FOUND;
910

1011
@Getter
1112
@AllArgsConstructor
1213
public enum ScheduleDomainExceptionCode implements ExceptionCode {
14+
DUPLICATE_SCHEDULE_TYPE(BAD_REQUEST, "동일 제출 유형의 일정이 이미 존재합 니다."),
1315
SCHEDULE_MANAGEMENT_NOT_FOUND(NOT_FOUND,"해당 일정을 찾을 수 없습니다.");
1416

1517
private final HttpStatus status;

aics-domain/src/main/java/kgu/developers/domain/schedule/infrastructure/JpaScheduleRepository.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import kgu.developers.domain.schedule.domain.SubmissionType;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

6-
import java.util.List;
6+
import java.util.Optional;
77

88
public interface JpaScheduleRepository extends JpaRepository<ScheduleJpaEntity, Long> {
9-
List<ScheduleJpaEntity> findBySubmissionType(SubmissionType submissionType);
9+
Optional<ScheduleJpaEntity> findBySubmissionType(SubmissionType submissionType);
10+
1011
}

aics-domain/src/main/java/kgu/developers/domain/schedule/infrastructure/ScheduleJpaEntity.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
@Entity
1919
@Getter
2020
@Builder
21-
@Table(name = "schedul")
21+
@Table(name = "schedule", uniqueConstraints = @UniqueConstraint(columnNames = "submission_type"))
2222
@NoArgsConstructor
2323
@AllArgsConstructor(access = PROTECTED)
2424
public class ScheduleJpaEntity extends BaseTimeEntity {
@@ -27,13 +27,16 @@ public class ScheduleJpaEntity extends BaseTimeEntity {
2727
@GeneratedValue(strategy = IDENTITY)
2828
private Long id;
2929

30-
@Column(nullable = false)
30+
@Column(name = "submission_type",nullable = false)
3131
@Enumerated(STRING)
3232
private SubmissionType submissionType;
3333

3434
@Column(nullable = false)
3535
private String title;
3636

37+
@Column(nullable = false, columnDefinition = "text")
38+
private String content;
39+
3740
@Column(nullable = false)
3841
private LocalDateTime startDate;
3942

@@ -45,10 +48,11 @@ public static ScheduleJpaEntity toEntity(final Schedule schedule) {
4548
return null;
4649
}
4750

48-
return kgu.developers.domain.schedule.infrastructure.ScheduleJpaEntity.builder()
51+
return ScheduleJpaEntity.builder()
4952
.id(schedule.getId())
5053
.submissionType(schedule.getSubmissionType())
5154
.title(schedule.getTitle())
55+
.content(schedule.getContent())
5256
.startDate(schedule.getStartDate())
5357
.endDate(schedule.getEndDate())
5458
.build();
@@ -59,6 +63,7 @@ public Schedule toDomain(){
5963
.submissionType(submissionType)
6064
.title(title)
6165
.startDate(startDate)
66+
.content(content)
6267
.endDate(endDate)
6368
.createdAt(getCreatedAt())
6469
.updatedAt(getUpdatedAt())

0 commit comments

Comments
 (0)