Skip to content

Commit fc26b26

Browse files
authored
[T3-162] 홈 루틴 조회 시 일자별 루틴전체 완료 구분값 추가 (#63)
* feat: 일자별 루틴 조회 시(홈 루틴 조회) 전체 루틴 완료 여부 값 추가 * fix: url path 수정 * feat: 추천 루틴 필드 추가 및 조회
1 parent 1942bd5 commit fc26b26

7 files changed

Lines changed: 53 additions & 19 deletions

File tree

src/main/java/bitnagil/bitnagil_backend/emotionMarble/controller/EmotionMarbleController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public CustomResponseDto<RegisterEmotionMarbleResponse> registryEmotionMarble(
3939
}
4040

4141
// todo: 당일의 유저가 선택한 감정 구슬 조회 API V2로 변환
42-
@GetMapping("/v2/{searchDate}")
42+
@GetMapping("/v2/emotion-marbles/{searchDate}")
4343
public CustomResponseDto<EmotionMarbleTypeResponseV2> getEmotionMarbleBySearchDateV2(
4444
@CurrentUser User user,
4545
@PathVariable LocalDate searchDate) {
@@ -50,7 +50,7 @@ public CustomResponseDto<EmotionMarbleTypeResponseV2> getEmotionMarbleBySearchDa
5050
// 당일의 유저가 선택한 감정 구슬 조회 API
5151
// TODO: v2로 전환 시 deprecated 처리
5252
@Deprecated()
53-
@GetMapping("/v1/{searchDate}")
53+
@GetMapping("/v1/emotion-marbles/{searchDate}")
5454
public CustomResponseDto<EmotionMarbleTypeResponse> getEmotionMarbleBySearchDate(
5555
@CurrentUser User user,
5656
@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate searchDate) {

src/main/java/bitnagil/bitnagil_backend/routineInfoV2/domain/RoutineInfoV2.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,9 @@
77

88
import bitnagil.bitnagil_backend.global.entity.BaseTimeEntity;
99
import bitnagil.bitnagil_backend.global.utils.DayOfWeekConverter;
10+
import bitnagil.bitnagil_backend.recommendedRoutine.domain.enums.RecommendedRoutineType;
1011
import bitnagil.bitnagil_backend.user.domain.User;
11-
import jakarta.persistence.Convert;
12-
import jakarta.persistence.Entity;
13-
import jakarta.persistence.FetchType;
14-
import jakarta.persistence.GeneratedValue;
15-
import jakarta.persistence.GenerationType;
16-
import jakarta.persistence.Id;
17-
import jakarta.persistence.JoinColumn;
18-
import jakarta.persistence.ManyToOne;
12+
import jakarta.persistence.*;
1913
import jakarta.validation.constraints.NotNull;
2014
import lombok.AccessLevel;
2115
import lombok.Builder;
@@ -56,20 +50,26 @@ public class RoutineInfoV2 extends BaseTimeEntity {
5650
@NotNull
5751
private Boolean routineDeletedYn; // 루틴 삭제 여부
5852

53+
@Enumerated(EnumType.STRING)
54+
@Column(columnDefinition = "varchar(40)")
55+
private RecommendedRoutineType recommendedRoutineType; // 추천 루틴 타입
56+
5957
@ManyToOne(fetch = FetchType.LAZY)
6058
@JoinColumn(name = "user_id")
6159
private User user; // 루틴의 주체인 유저
6260

6361
@Builder
6462
public RoutineInfoV2(String routineName, List<DayOfWeek> routineRepeatDay, LocalTime routineExecutionTime,
65-
LocalDate routineStartDate, LocalDate routineEndDate, Boolean routineDeletedYn, User user) {
63+
LocalDate routineStartDate, LocalDate routineEndDate, Boolean routineDeletedYn, User user,
64+
RecommendedRoutineType recommendedRoutineType) {
6665
this.routineName = routineName;
6766
this.routineRepeatDay = routineRepeatDay;
6867
this.routineExecutionTime = routineExecutionTime;
6968
this.routineStartDate = routineStartDate;
7069
this.routineEndDate = routineEndDate;
7170
this.routineDeletedYn = routineDeletedYn;
7271
this.user = user;
72+
this.recommendedRoutineType = recommendedRoutineType;
7373
}
7474

7575
public void updateRoutineEndDate(LocalDate routineEndDate) {

src/main/java/bitnagil/bitnagil_backend/routineV2/response/RoutineV2SearchResponse.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,20 @@
1414
@Builder
1515
public class RoutineV2SearchResponse {
1616
@Schema(description = "날짜(LocalDate: 2025-08-01)와 같은 형태를 key로 가지는 루틴 목록 Map입니다. Swagger에서는 additionalProp1처럼 보일 수 있습니다.")
17-
private Map<LocalDate, List<RoutineV2SearchResultDto>> routines; // 날짜별 루틴 목록
17+
private Map<LocalDate, RoutineData> routines; // 날짜별 루틴 목록
18+
19+
@Getter
20+
@AllArgsConstructor
21+
@Builder
22+
public static class RoutineData {
23+
@Schema(description = "날짜별 루틴 목록")
24+
private List<RoutineV2SearchResultDto> routineList;
25+
26+
@Schema(description = "해당 날짜 모든 루틴이 완료되었는지 여부")
27+
private boolean allCompleted;
28+
29+
public void setAllCompleted(boolean allCompleted) {
30+
this.allCompleted = allCompleted;
31+
}
32+
}
1833
}

src/main/java/bitnagil/bitnagil_backend/routineV2/response/RoutineV2SearchResultDto.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package bitnagil.bitnagil_backend.routineV2.response;
22

3+
import bitnagil.bitnagil_backend.recommendedRoutine.domain.enums.RecommendedRoutineType;
34
import bitnagil.bitnagil_backend.routine.domain.enums.RoutineType;
45
import io.swagger.v3.oas.annotations.media.Schema;
56
import lombok.AllArgsConstructor;
@@ -31,4 +32,6 @@ public class RoutineV2SearchResultDto {
3132
private List<String> subRoutineNames;
3233
@Schema(example = "[true, false]")
3334
private List<Boolean> subRoutineCompleteYn;
35+
@Schema(example = "WAKE_UP")
36+
private RecommendedRoutineType recommendedRoutineType;
3437
}

src/main/java/bitnagil/bitnagil_backend/routineV2/service/RoutineV2Mapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.springframework.stereotype.Component;
77

88
import java.time.LocalDate;
9-
import java.util.List;
109
import java.util.Map;
1110

1211

@@ -26,10 +25,11 @@ public RoutineV2SearchResultDto toRoutineV2SearchResultDto(RoutineV2 routine){
2625
.routineCompleteYn(routine.getRoutineCompleteYn())
2726
.subRoutineNames(routine.getSubRoutineNames())
2827
.subRoutineCompleteYn(routine.getSubRoutineCompleteYn())
28+
.recommendedRoutineType(routine.getRoutineInfo().getRecommendedRoutineType())
2929
.build();
3030
}
3131

32-
public RoutineV2SearchResponse toRoutineV2SearchResponse(Map<LocalDate, List<RoutineV2SearchResultDto>> response) {
32+
public RoutineV2SearchResponse toRoutineV2SearchResponse(Map<LocalDate, RoutineV2SearchResponse.RoutineData> response) {
3333
return RoutineV2SearchResponse.builder()
3434
.routines(response)
3535
.build();

src/main/java/bitnagil/bitnagil_backend/routineV2/service/RoutineV2Service.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,20 +132,34 @@ private List<LocalDate> generateRoutineDatesWithinPeriod(
132132

133133
// 특정 기간 보유 루틴 조회
134134
private RoutineV2SearchResponse queryRoutines(User user, LocalDate startDate, LocalDate endDate) {
135-
Map<LocalDate, List<RoutineV2SearchResultDto>> response = new HashMap<>();
135+
Map<LocalDate, RoutineV2SearchResponse.RoutineData> response = new HashMap<>();
136136

137137
List<RoutineV2> routineList = routineV2Repository.findByUserAndDateRange(user, startDate, endDate);
138138

139139
for (RoutineV2 routineV2 : routineList) {
140140
LocalDate date = routineV2.getRoutineDate();
141141
RoutineV2SearchResultDto routineSearchResultDto = routineV2Mapper.toRoutineV2SearchResultDto(routineV2);
142142

143-
// 날짜별 리스트에 추가
144-
response.computeIfAbsent(date, key -> new ArrayList<>()).add(routineSearchResultDto);
143+
// 날짜별 RoutineData 생성 혹은 가져오기
144+
response.computeIfAbsent(date, key -> RoutineV2SearchResponse.RoutineData.builder()
145+
.routineList(new ArrayList<>())
146+
.allCompleted(true) // 초기값 true
147+
.build());
148+
149+
RoutineV2SearchResponse.RoutineData routineData = response.get(date);
150+
151+
// 리스트에 추가
152+
routineData.getRoutineList().add(routineSearchResultDto);
153+
154+
// 하나라도 완료 안 된 루틴이 있으면 false로 변경
155+
if (!routineSearchResultDto.getRoutineCompleteYn()) {
156+
routineData.setAllCompleted(false);
157+
}
145158
}
146159

147-
response.forEach((date, routineSearchResultDto) ->
148-
routineSearchResultDto.sort(Comparator.comparing(RoutineV2SearchResultDto::getExecutionTime))
160+
// 정렬 처리
161+
response.values().forEach(data ->
162+
data.getRoutineList().sort(Comparator.comparing(RoutineV2SearchResultDto::getExecutionTime))
149163
);
150164

151165
return routineV2Mapper.toRoutineV2SearchResponse(response);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE routine_infov2
2+
ADD COLUMN recommended_routine_type VARCHAR(40) NULL;

0 commit comments

Comments
 (0)