Skip to content

Commit 4869e50

Browse files
authored
Merge pull request #58 from YAPP-Github/feat/T3-150
[T3-150] 루틴 정보 등록 및 루틴 시작, 종료일자 기반의 루틴 생성
2 parents dc76e5b + fa3ddce commit 4869e50

11 files changed

Lines changed: 209 additions & 12 deletions

File tree

src/main/java/bitnagil/bitnagil_backend/global/swagger/ApiTags.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class ApiTags {
88
public static final String USER_AUTH = "유저 인증 API";
99
public static final String HEALTH_CHECK = "헬스체크 API";
1010
public static final String ROUTINE = "루틴 API";
11+
public static final String ROUTINEV2 = "[v2] 루틴 API";
1112
public static final String ONBOARDING = "온보딩 API";
1213
public static final String EMOTION_MARBLE = "감정구슬 API";
1314
public static final String RECOMMENDED_ROUTINE = "추천 루틴 API";

src/main/java/bitnagil/bitnagil_backend/onboarding/service/OnboardingService.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
import bitnagil.bitnagil_backend.recommendedRoutine.service.RecommendedRoutineManager;
2222
import bitnagil.bitnagil_backend.routineInfoV2.domain.RoutineInfoV2;
2323
import bitnagil.bitnagil_backend.routineInfoV2.repository.RoutineInfoV2Repository;
24-
import bitnagil.bitnagil_backend.routineInfoV2.service.RoutineInfoFactoryV2;
24+
import bitnagil.bitnagil_backend.routineInfoV2.service.RoutineInfoV2Factory;
2525
import bitnagil.bitnagil_backend.routineV2.domain.RoutineV2;
2626
import bitnagil.bitnagil_backend.routineV2.repository.RoutineV2Repository;
27-
import bitnagil.bitnagil_backend.routineV2.service.RoutineFactoryV2;
27+
import bitnagil.bitnagil_backend.routineV2.service.RoutineV2Factory;
2828
import bitnagil.bitnagil_backend.user.domain.User;
2929
import bitnagil.bitnagil_backend.user.service.UserManager;
3030
import lombok.RequiredArgsConstructor;
@@ -57,8 +57,8 @@ public class OnboardingService {
5757
private final RoutineInfoV2Repository routineInfoV2Repository;
5858
private final RoutineV2Repository routineV2Repository;
5959

60-
private final RoutineFactoryV2 routineFactoryV2;
61-
private final RoutineInfoFactoryV2 routineInfoFactory;
60+
private final RoutineV2Factory routineV2Factory;
61+
private final RoutineInfoV2Factory routineInfoV2Factory;
6262

6363

6464
/**
@@ -108,7 +108,7 @@ public void registrationRoutinesV2(RegistrationRoutinesRequest request, User use
108108
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_RECOMMENDED_ROUTINE));
109109

110110
// 온보딩으로 등록한 루틴은 루틴 시작, 종료일자가 당일로 설정된다.
111-
RoutineInfoV2 routineInfo = routineInfoFactory.createNewRoutineInfo(
111+
RoutineInfoV2 routineInfo = routineInfoV2Factory.createNewRoutineInfo(
112112
recommendedRoutine.getRecommendedRoutineName(),
113113
List.of(), // 온보딩은 반복일자를 설정하지 않는다.
114114
recommendedRoutine.getExecutionTime(),
@@ -130,16 +130,17 @@ public void registrationRoutinesV2(RegistrationRoutinesRequest request, User use
130130

131131
// 서브 루틴 완료 여부 리스트 생성
132132
List<Boolean> subRoutineCompleteYn = recommendedSubRoutines.stream()
133-
.map(completeYn -> false)
134-
.toList();
133+
.map(completeYn -> false)
134+
.toList();
135135

136136
// 루틴 정보에 해당하는 루틴을 생성한다.
137-
RoutineV2 routine = routineFactoryV2.createNewRoutine(
137+
RoutineV2 routine = routineV2Factory.createNewRoutine(
138138
today,
139139
false,
140140
subRoutineNames,
141141
subRoutineCompleteYn,
142142
routineInfo);
143+
143144
routineV2Repository.save(routine);
144145
}
145146
}

src/main/java/bitnagil/bitnagil_backend/routine/request/RegisterRoutineRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class RegisterRoutineRequest {
2323
@Schema(description = "반복 요일에 대한 리스트입니다.",
2424
example = "[\"MONDAY\", \"FRIDAY\"]",
2525
required = true)
26+
@NotNull
2627
private List<DayOfWeek> repeatDay;
2728

2829
@Schema(description = "루틴 시작 시간입니다.",

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.time.LocalTime;
66
import java.util.List;
77

8+
import bitnagil.bitnagil_backend.global.entity.BaseTimeEntity;
89
import bitnagil.bitnagil_backend.global.utils.DayOfWeekConverter;
910
import bitnagil.bitnagil_backend.user.domain.User;
1011
import jakarta.persistence.Convert;
@@ -31,7 +32,7 @@
3132
@Entity
3233
@SQLDelete(sql = "UPDATE routine_info_v2 SET deleted_at = NOW() WHERE routine_info_id = ?")
3334
@Where(clause = "deleted_at IS NULL")
34-
public class RoutineInfoV2 {
35+
public class RoutineInfoV2 extends BaseTimeEntity {
3536
@Id
3637
@GeneratedValue(strategy = GenerationType.IDENTITY)
3738
private Long routineInfoId; // 루틴 정보 ID

src/main/java/bitnagil/bitnagil_backend/routineInfoV2/service/RoutineInfoFactoryV2.java renamed to src/main/java/bitnagil/bitnagil_backend/routineInfoV2/service/RoutineInfoV2Factory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* 루틴 관련 엔티티 생성, 초기화 책임을 담당하는 클래스입니다.
1414
*/
1515
@Component
16-
public class RoutineInfoFactoryV2 {
16+
public class RoutineInfoV2Factory {
1717

1818
// 신규 RoutineInfo 엔티티 생성 및 초기화
1919
public RoutineInfoV2 createNewRoutineInfo(String routineName, List<DayOfWeek> routineRepeatDay,
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package bitnagil.bitnagil_backend.routineV2.controller;
2+
3+
import org.springframework.web.bind.annotation.PostMapping;
4+
import org.springframework.web.bind.annotation.RequestBody;
5+
import org.springframework.web.bind.annotation.RequestMapping;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import bitnagil.bitnagil_backend.global.annotation.CurrentUser;
9+
import bitnagil.bitnagil_backend.global.response.CustomResponseDto;
10+
import bitnagil.bitnagil_backend.routineV2.controller.spec.RoutineV2Spec;
11+
import bitnagil.bitnagil_backend.routineV2.request.RegisterRoutineV2Request;
12+
import bitnagil.bitnagil_backend.routineV2.service.RoutineV2Service;
13+
import bitnagil.bitnagil_backend.user.domain.User;
14+
import lombok.RequiredArgsConstructor;
15+
16+
@RestController
17+
@RequiredArgsConstructor
18+
@RequestMapping(value = "/api/v2/routines")
19+
public class RoutineV2Controller implements RoutineV2Spec {
20+
21+
private final RoutineV2Service routineV2Service;
22+
23+
@PostMapping("")
24+
public CustomResponseDto<Object> registerRoutine(@CurrentUser User user, @RequestBody RegisterRoutineV2Request request) {
25+
routineV2Service.registerRoutineV2(user, request);
26+
27+
return CustomResponseDto.from(null);
28+
}
29+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package bitnagil.bitnagil_backend.routineV2.controller.spec;
2+
3+
import bitnagil.bitnagil_backend.global.response.CustomResponseDto;
4+
import bitnagil.bitnagil_backend.global.swagger.ApiTags;
5+
import bitnagil.bitnagil_backend.routineV2.request.RegisterRoutineV2Request;
6+
import bitnagil.bitnagil_backend.user.domain.User;
7+
import io.swagger.v3.oas.annotations.Operation;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
10+
@Tag(name = ApiTags.ROUTINEV2)
11+
public interface RoutineV2Spec {
12+
13+
@Operation(summary = "루틴 정보 등록 및 루틴 시작, 종료일자 사이에서 반복요일에 해당하는 날짜로 루틴 데이터를 생성합니다.")
14+
CustomResponseDto<Object> registerRoutine(User user, RegisterRoutineV2Request request);
15+
}

src/main/java/bitnagil/bitnagil_backend/routineV2/domain/RoutineV2.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.time.LocalDate;
44
import java.util.List;
55

6+
import bitnagil.bitnagil_backend.global.entity.BaseTimeEntity;
67
import bitnagil.bitnagil_backend.global.utils.BooleanListConverter;
78
import bitnagil.bitnagil_backend.global.utils.StringListConverter;
89
import bitnagil.bitnagil_backend.routineInfoV2.domain.RoutineInfoV2;
@@ -30,7 +31,7 @@
3031
@Entity
3132
@SQLDelete(sql = "UPDATE routine_v2 SET deleted_at = NOW() WHERE routine_id = ?")
3233
@Where(clause = "deleted_at IS NULL")
33-
public class RoutineV2 {
34+
public class RoutineV2 extends BaseTimeEntity {
3435
@Id
3536
@GeneratedValue(strategy = GenerationType.IDENTITY)
3637
private Long routineId; // 일일 루틴 ID
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package bitnagil.bitnagil_backend.routineV2.request;
2+
3+
import java.time.DayOfWeek;
4+
import java.time.LocalDate;
5+
import java.time.LocalTime;
6+
import java.util.List;
7+
8+
import io.swagger.v3.oas.annotations.media.Schema;
9+
import jakarta.validation.constraints.NotNull;
10+
import lombok.Getter;
11+
import lombok.NoArgsConstructor;
12+
13+
@Getter
14+
@NoArgsConstructor
15+
@Schema(description = "루틴 등록 요청 DTO")
16+
public class RegisterRoutineV2Request {
17+
18+
@Schema(description = "루틴 이름입니다.",
19+
example = "아침 준비",
20+
required = true)
21+
@NotNull
22+
private String routineName;
23+
24+
@Schema(description = "반복 요일에 대한 리스트입니다. (반복요일이 없으면 당일 루틴입니다.)",
25+
example = "[\"MONDAY\", \"FRIDAY\"]",
26+
required = true)
27+
@NotNull
28+
private List<DayOfWeek> repeatDay;
29+
30+
@Schema(description = "루틴 시작 일자입니다.",
31+
example = "2025-08-01",
32+
required = true)
33+
@NotNull
34+
private LocalDate routineStartDate;
35+
36+
@Schema(description = "루틴 시작 일자입니다.",
37+
example = "2025-08-31",
38+
required = true)
39+
@NotNull
40+
private LocalDate routineEndDate;
41+
42+
@Schema(description = "루틴 시작 시간입니다.",
43+
example = "08:15:00",
44+
required = true)
45+
@NotNull
46+
private LocalTime executionTime;
47+
48+
@Schema(description = "세부 루틴 이름에 대한 리스트입니다.",
49+
example = "[\"손 씻기\", \"세수 하기\", \"양치 하기\"]")
50+
private List<String> subRoutineName;
51+
}

src/main/java/bitnagil/bitnagil_backend/routineV2/service/RoutineFactoryV2.java renamed to src/main/java/bitnagil/bitnagil_backend/routineV2/service/RoutineV2Factory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import bitnagil.bitnagil_backend.routineInfoV2.domain.RoutineInfoV2;
44
import bitnagil.bitnagil_backend.routineV2.domain.RoutineV2;
5+
56
import org.springframework.stereotype.Component;
67

78
import java.time.LocalDate;
@@ -11,7 +12,7 @@
1112
* 루틴 관련 엔티티 생성, 초기화 책임을 담당하는 클래스입니다.
1213
*/
1314
@Component
14-
public class RoutineFactoryV2 {
15+
public class RoutineV2Factory {
1516

1617
// 신규 Routine 엔티티 생성 및 초기화
1718
public RoutineV2 createNewRoutine(LocalDate routineDate, Boolean routineCompleteYn, List<String> subRoutineNames,

0 commit comments

Comments
 (0)