Skip to content

Commit eb8fb5c

Browse files
Merge pull request #93 from prgrms-web-devcourse-final-project/refactor/#84
[Plan] 기존 타임라인 정렬 방식 변경
2 parents e5c6010 + b729ae7 commit eb8fb5c

7 files changed

Lines changed: 18 additions & 74 deletions

File tree

src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/request/ScheduleAddRequest.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import lombok.Getter;
1313
import lombok.NoArgsConstructor;
1414

15-
import java.time.LocalDateTime;
15+
import java.time.LocalTime;
1616

1717
@Getter
1818
@NoArgsConstructor
@@ -25,8 +25,8 @@ public class ScheduleAddRequest {
2525
@Size(max = 100, message = "제목은 100자 이하여야 합니다.")
2626
private String title;
2727

28-
@NotNull(message = "시작 일시는 필수입니다.")
29-
private LocalDateTime startAt;
28+
@NotNull(message = "시작 시간은 필수입니다.")
29+
private LocalTime startAt;
3030

3131
@NotNull(message = "소요 시간(분)은 필수입니다.")
3232
@Positive(message = "소요 시간은 양수여야 합니다.")
@@ -52,10 +52,6 @@ public class ScheduleAddRequest {
5252
@NotBlank(message = "상세 정보는 필수입니다.")
5353
private String details;
5454

55-
// 정렬 순서 (미지정 시 자동 계산)
56-
@Positive(message = "정렬 순서는 양수여야 합니다.")
57-
private Integer sequenceOrder;
58-
5955
// 교통 수단인 경우 사용
6056
@Min(value = -90, message = "출발지 위도는 -90 이상이어야 합니다.")
6157
@Max(value = 90, message = "출발지 위도는 90 이하여야 합니다.")

src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/request/ScheduleUpdateRequest.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import lombok.Getter;
1111
import lombok.NoArgsConstructor;
1212

13-
import java.time.LocalDateTime;
13+
import java.time.LocalTime;
1414

1515
@Getter
1616
@NoArgsConstructor
@@ -22,7 +22,7 @@ public class ScheduleUpdateRequest {
2222
@Size(max = 100, message = "제목은 100자 이하여야 합니다.")
2323
private String title;
2424

25-
private LocalDateTime startAt;
25+
private LocalTime startAt;
2626

2727
@Positive(message = "소요 시간은 양수여야 합니다.")
2828
private Integer duration;
@@ -43,10 +43,6 @@ public class ScheduleUpdateRequest {
4343

4444
private String details;
4545

46-
// 정렬 순서 (미지정 시 기존 값 유지)
47-
@Positive(message = "정렬 순서는 양수여야 합니다.")
48-
private Integer sequenceOrder;
49-
5046
// 교통 수단인 경우 사용
5147
@Min(value = -90, message = "출발지 위도는 -90 이상이어야 합니다.")
5248
@Max(value = 90, message = "출발지 위도는 90 이하여야 합니다.")

src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/response/PlanDetailResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import lombok.Getter;
77

88
import java.time.LocalDateTime;
9+
import java.time.LocalTime;
910
import java.util.List;
1011

1112

@@ -38,14 +39,13 @@ public static class ScheduleInfo {
3839
private Long id;
3940
private Schedule.ScheduleType scheduleType;
4041
private String title;
41-
private java.time.LocalDateTime startAt;
42+
private LocalTime startAt;
4243
private Integer duration;
4344
private String location;
4445
private Double locationLat;
4546
private Double locationLon;
4647
private Integer estimatedCost;
4748
private String details;
48-
private Integer sequenceOrder;
4949
private Double startPlaceLat;
5050
private Double startPlaceLon;
5151
private Double endPlaceLat;

src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/response/ScheduleResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@
55
import lombok.Getter;
66

77
import java.time.LocalDateTime;
8+
import java.time.LocalTime;
89

910
@Getter
1011
@Builder
1112
public class ScheduleResponse {
1213
private Long id;
1314
private Schedule.ScheduleType scheduleType;
1415
private String title;
15-
private LocalDateTime startAt;
16+
private LocalTime startAt;
1617
private Integer duration;
1718
private String location;
1819
private Double locationLat;
1920
private Double locationLon;
2021
private Integer estimatedCost;
2122
private String details;
22-
private Integer sequenceOrder;
2323
// 교통 수단 정보
2424
private Double startPlaceLat;
2525
private Double startPlaceLon;

src/main/java/com/back/web7_9_codecrete_be/domain/plans/entity/Schedule.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.hibernate.annotations.UpdateTimestamp;
77

88
import java.time.LocalDateTime;
9+
import java.time.LocalTime;
910

1011

1112
@Entity
@@ -32,7 +33,7 @@ public class Schedule {
3233
private String title;
3334

3435
@Column(name = "start_at", nullable = false)
35-
private LocalDateTime startAt;
36+
private LocalTime startAt;
3637

3738
@Column(name = "duration", nullable = false)
3839
private Integer duration;
@@ -53,9 +54,6 @@ public class Schedule {
5354
@Column(name = "details", columnDefinition = "TEXT", nullable = false)
5455
private String details;
5556

56-
@Column(name = "sequence_order", nullable = false)
57-
private Integer sequenceOrder;
58-
5957
// 교통 수단 정보 (schedule_type = 'TRANSPORT'인 경우 사용)
6058
@Column(name = "start_place_lat")
6159
private Double startPlaceLat;
@@ -87,10 +85,9 @@ public class Schedule {
8785

8886
@Builder
8987
public Schedule(Plan plan, ScheduleType scheduleType, String title,
90-
LocalDateTime startAt, Integer duration,
88+
LocalTime startAt, Integer duration,
9189
String location, Double locationLat, Double locationLon,
9290
Integer estimatedCost, String details,
93-
Integer sequenceOrder,
9491
Double startPlaceLat, Double startPlaceLon,
9592
Double endPlaceLat, Double endPlaceLon,
9693
Integer distance, TransportType transportType) {
@@ -104,7 +101,6 @@ public Schedule(Plan plan, ScheduleType scheduleType, String title,
104101
this.locationLon = locationLon;
105102
this.estimatedCost = estimatedCost;
106103
this.details = details;
107-
this.sequenceOrder = sequenceOrder;
108104
this.startPlaceLat = startPlaceLat;
109105
this.startPlaceLon = startPlaceLon;
110106
this.endPlaceLat = endPlaceLat;
@@ -114,10 +110,9 @@ public Schedule(Plan plan, ScheduleType scheduleType, String title,
114110
}
115111

116112
public void update(ScheduleType scheduleType, String title,
117-
LocalDateTime startAt, Integer duration,
113+
LocalTime startAt, Integer duration,
118114
String location, Double locationLat, Double locationLon,
119115
Integer estimatedCost, String details,
120-
Integer sequenceOrder,
121116
Double startPlaceLat, Double startPlaceLon,
122117
Double endPlaceLat, Double endPlaceLon,
123118
Integer distance, TransportType transportType) {
@@ -130,7 +125,6 @@ public void update(ScheduleType scheduleType, String title,
130125
this.locationLon = locationLon;
131126
this.estimatedCost = estimatedCost;
132127
this.details = details;
133-
this.sequenceOrder = sequenceOrder;
134128
this.startPlaceLat = startPlaceLat;
135129
this.startPlaceLon = startPlaceLon;
136130
this.endPlaceLat = endPlaceLat;

src/main/java/com/back/web7_9_codecrete_be/domain/plans/repository/ScheduleRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
public interface ScheduleRepository extends JpaRepository<Schedule, Long> {
1212

1313
/**
14-
* 특정 Plan의 모든 일정을 순서대로 조회
14+
* 특정 Plan의 모든 일정을 시작 시간 순서대로 조회
1515
*/
16-
List<Schedule> findByPlan_PlanIdOrderBySequenceOrderAsc(Long planId);
16+
List<Schedule> findByPlan_PlanIdOrderByStartAtAsc(Long planId);
1717

1818
/**
1919
* 특정 Plan에 속한 Schedule의 개수 조회 (다음 순서 계산용)

src/main/java/com/back/web7_9_codecrete_be/domain/plans/service/PlanService.java

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,9 @@ public PlanDetailResponse getPlanDetail(Long planId, User user) {
128128
.build())
129129
.collect(Collectors.toList());
130130

131-
// 타임라인 형태로 일정 정렬 (sequenceOrder 기준) - Repository 메서드 사용으로 일관성 향상
131+
// 타임라인 형태로 일정 정렬 (startAt 기준)
132132
List<Schedule> sortedSchedules = scheduleRepository
133-
.findByPlan_PlanIdOrderBySequenceOrderAsc(planId);
133+
.findByPlan_PlanIdOrderByStartAtAsc(planId);
134134

135135
List<PlanDetailResponse.ScheduleInfo> schedules = sortedSchedules.stream()
136136
.map(item -> PlanDetailResponse.ScheduleInfo.builder()
@@ -144,7 +144,6 @@ public PlanDetailResponse getPlanDetail(Long planId, User user) {
144144
.locationLon(item.getLocationLon())
145145
.estimatedCost(item.getEstimatedCost())
146146
.details(item.getDetails())
147-
.sequenceOrder(item.getSequenceOrder())
148147
.startPlaceLat(item.getStartPlaceLat())
149148
.startPlaceLon(item.getStartPlaceLon())
150149
.endPlaceLat(item.getEndPlaceLat())
@@ -256,13 +255,6 @@ public ScheduleResponse addSchedule(Long planId, User user, ScheduleAddRequest r
256255
}
257256
}
258257

259-
// 순서가 지정되지 않은 경우, 마지막 순서 + 1로 설정
260-
Integer sequenceOrder = request.getSequenceOrder();
261-
if (sequenceOrder == null) {
262-
long count = scheduleRepository.countByPlan_PlanId(planId);
263-
sequenceOrder = (int) count + 1;
264-
}
265-
266258
Schedule schedule = Schedule.builder()
267259
.plan(plan)
268260
.scheduleType(request.getScheduleType())
@@ -274,7 +266,6 @@ public ScheduleResponse addSchedule(Long planId, User user, ScheduleAddRequest r
274266
.locationLon(request.getLocationLon())
275267
.estimatedCost(request.getEstimatedCost())
276268
.details(request.getDetails())
277-
.sequenceOrder(sequenceOrder)
278269
.startPlaceLat(request.getStartPlaceLat())
279270
.startPlaceLon(request.getStartPlaceLon())
280271
.endPlaceLat(request.getEndPlaceLat())
@@ -302,7 +293,7 @@ public ScheduleListResponse getSchedules(Long planId, User user) {
302293
findPlanWithParticipantCheck(planId, user);
303294

304295
List<Schedule> schedules = scheduleRepository
305-
.findByPlan_PlanIdOrderBySequenceOrderAsc(planId);
296+
.findByPlan_PlanIdOrderByStartAtAsc(planId);
306297

307298
List<ScheduleResponse> scheduleResponses = schedules.stream()
308299
.map(this::toScheduleResponse)
@@ -420,7 +411,6 @@ public ScheduleResponse updateSchedule(Long planId, Long scheduleId, User user,
420411
request.getLocationLon() != null ? request.getLocationLon() : schedule.getLocationLon(),
421412
request.getEstimatedCost() != null ? request.getEstimatedCost() : schedule.getEstimatedCost(),
422413
request.getDetails() != null ? request.getDetails() : schedule.getDetails(),
423-
request.getSequenceOrder() != null ? request.getSequenceOrder() : schedule.getSequenceOrder(),
424414
request.getStartPlaceLat() != null ? request.getStartPlaceLat() : schedule.getStartPlaceLat(),
425415
request.getStartPlaceLon() != null ? request.getStartPlaceLon() : schedule.getStartPlaceLon(),
426416
request.getEndPlaceLat() != null ? request.getEndPlaceLat() : schedule.getEndPlaceLat(),
@@ -450,39 +440,8 @@ public ScheduleDeleteResponse deleteSchedule(Long planId, Long scheduleId, User
450440
.findByScheduleIdAndPlan_PlanId(scheduleId, planId)
451441
.orElseThrow(() -> new BusinessException(PlanErrorCode.SCHEDULE_NOT_FOUND));
452442

453-
Integer deletedSequenceOrder = schedule.getSequenceOrder();
454443
scheduleRepository.delete(schedule);
455444

456-
// 삭제된 일정 이후의 일정들의 sequenceOrder를 1씩 감소시켜 재정렬
457-
if (deletedSequenceOrder != null) {
458-
List<Schedule> remainingSchedules = scheduleRepository
459-
.findByPlan_PlanIdOrderBySequenceOrderAsc(planId);
460-
461-
// 삭제된 순서보다 큰 일정들만 업데이트
462-
remainingSchedules.stream()
463-
.filter(s -> s.getSequenceOrder() != null && s.getSequenceOrder() > deletedSequenceOrder)
464-
.forEach(remainingSchedule -> {
465-
remainingSchedule.update(
466-
remainingSchedule.getScheduleType(),
467-
remainingSchedule.getTitle(),
468-
remainingSchedule.getStartAt(),
469-
remainingSchedule.getDuration(),
470-
remainingSchedule.getLocation(),
471-
remainingSchedule.getLocationLat(),
472-
remainingSchedule.getLocationLon(),
473-
remainingSchedule.getEstimatedCost(),
474-
remainingSchedule.getDetails(),
475-
remainingSchedule.getSequenceOrder() - 1,
476-
remainingSchedule.getStartPlaceLat(),
477-
remainingSchedule.getStartPlaceLon(),
478-
remainingSchedule.getEndPlaceLat(),
479-
remainingSchedule.getEndPlaceLon(),
480-
remainingSchedule.getDistance(),
481-
remainingSchedule.getTransportType()
482-
);
483-
});
484-
}
485-
486445
return ScheduleDeleteResponse.builder()
487446
.scheduleId(scheduleId)
488447
.build();
@@ -566,7 +525,6 @@ private ScheduleResponse toScheduleResponse(Schedule schedule) {
566525
.locationLon(schedule.getLocationLon())
567526
.estimatedCost(schedule.getEstimatedCost())
568527
.details(schedule.getDetails())
569-
.sequenceOrder(schedule.getSequenceOrder())
570528
.startPlaceLat(schedule.getStartPlaceLat())
571529
.startPlaceLon(schedule.getStartPlaceLon())
572530
.endPlaceLat(schedule.getEndPlaceLat())

0 commit comments

Comments
 (0)