55import bitnagil .bitnagil_backend .emotionMarble .repository .EmotionMarbleRepository ;
66import bitnagil .bitnagil_backend .emotionMarble .request .RegisterEmotionMarbleRequest ;
77import bitnagil .bitnagil_backend .emotionMarble .response .EmotionMarbleTypeResponse ;
8- import bitnagil .bitnagil_backend .emotionMarble .response .RecommendedRoutineDto ;
9- import bitnagil .bitnagil_backend .emotionMarble .response .RecommendedSubRoutineDto ;
8+ import bitnagil .bitnagil_backend .recommendedRoutine .response .RecommendedRoutineDto ;
109import bitnagil .bitnagil_backend .emotionMarble .response .RegisterEmotionMarbleResponse ;
11- import bitnagil .bitnagil_backend .global .entity .HistoryPk ;
1210import bitnagil .bitnagil_backend .global .errorcode .ErrorCode ;
1311import bitnagil .bitnagil_backend .global .exception .CustomException ;
1412
15- import bitnagil .bitnagil_backend .onboarding .domain .Case ;
16- import bitnagil .bitnagil_backend .recommendedRoutine .domain .RecommendedRoutine ;
17- import bitnagil .bitnagil_backend .recommendedRoutine .domain .RecommendedSubRoutine ;
18- import bitnagil .bitnagil_backend .recommendedRoutine .repository .RecommendedRoutineRepository ;
19- import bitnagil .bitnagil_backend .recommendedRoutine .repository .RecommendedSubRoutineRepository ;
13+ import bitnagil .bitnagil_backend .recommendedRoutine .service .RecommendedRoutineManager ;
2014import bitnagil .bitnagil_backend .user .domain .User ;
2115import lombok .RequiredArgsConstructor ;
16+
2217import org .springframework .stereotype .Service ;
2318import org .springframework .transaction .annotation .Transactional ;
2419
2520import java .time .LocalDate ;
2621import java .time .LocalDateTime ;
2722import java .time .LocalTime ;
28- import java .util .ArrayList ;
2923import java .util .List ;
30- import java .util .UUID ;
3124
25+ /**
26+ * 감정 구슬에 대한 로직을 관리하는 클래스입니다.
27+ */
3228@ Service
3329@ RequiredArgsConstructor
3430public class EmotionMarbleService {
3531
3632 private final EmotionMarbleRepository emotionMarbleRepository ;
37- private final RecommendedRoutineRepository recommendRoutineRepository ;
38- private final RecommendedSubRoutineRepository recommendedSubRoutineRepository ;
33+
34+ private final RecommendedRoutineManager recommendedRoutineManager ;
35+ private final EmotionMarbleFactory emotionMarbleFactory ;
3936
4037 // 감정 구술 조회(enum의 value를 가져온다.)
4138 public EmotionMarbleTypeResponse getEmotionMarbles () {
@@ -55,56 +52,19 @@ public RegisterEmotionMarbleResponse registryEmotionMarble(User user, RegisterEm
5552 throw new CustomException (ErrorCode .ALREADY_REGISTERED_EMOTION_MARBLE );
5653 }
5754
58- EmotionMarble emotionMarble = EmotionMarble .builder ()
59- .emotionMarblePk (new HistoryPk (UUID .randomUUID (), 1L ))
60- .emotionMarbleType (request .getEmotionMarbleType ())
61- .date (nowDate )
62- .userId (user .getUserPk ().getId ())
63- .historyStartDateTime (nowDateTime )
64- .historyEndDateTime (endDateTime ) // historyEndDateTime은 당일 11시 59분 59초로 설정(하루씩 설정되기 때문. 이러면 매일 감정 갱신이 불필요함)
65- .resultCase ( // 감정 구슬에 따른 추천 루틴을 찾기 위해 Case 객체를 생성
66- Case .builder ()
67- .caseId (request .getEmotionMarbleType ().getCaseId ())
68- .build ()
69- ).build ();
55+ EmotionMarble emotionMarble = emotionMarbleFactory .createTodayEmotionMarble (
56+ user , request , nowDate , nowDateTime , endDateTime );
7057
7158 emotionMarbleRepository .save (emotionMarble );
7259
7360 // 감정 구슬에 따른 추천 루틴 응답
74- List <RecommendedRoutine > recommendedRoutines = recommendRoutineRepository .findByResultCase (emotionMarble .getResultCase ());
75- if (recommendedRoutines .isEmpty ()) {
76- throw new CustomException (ErrorCode .NOT_FOUND_RECOMMENDED_ROUTINE );
77- }
61+ List <RecommendedRoutineDto > recommendedRoutineDtoList =
62+ recommendedRoutineManager .recommendRoutinesByEmotionMarble (emotionMarble .getResultCase ());
7863
79- // 응답 생성
80- List <RecommendedRoutineDto > recommendedRoutineDtoList = new ArrayList <>();
81- for (RecommendedRoutine recommendedRoutine : recommendedRoutines ) {
82- List <RecommendedSubRoutineDto > recommendedRoutineDetailDtoList = new ArrayList <>();
83-
84- List <RecommendedSubRoutine > recommendedSubRoutines = recommendedSubRoutineRepository .findByRecommendedRoutine (recommendedRoutine );
85-
86- // 추천 루틴의 세부 루틴을 dto로 변환한다.
87- for (RecommendedSubRoutine recommendedSubRoutine : recommendedSubRoutines ) {
88- RecommendedSubRoutineDto recommendedRoutineDetailDto = RecommendedSubRoutineDto .builder ()
89- .recommendedSubRoutineId (recommendedSubRoutine .getRecommendedSubRoutineId ())
90- .recommendedSubRoutineName (recommendedSubRoutine .getSubRoutineName ())
91- .build ();
92- recommendedRoutineDetailDtoList .add (recommendedRoutineDetailDto );
93- }
94-
95- // 추천 루틴을 dto로 변환한다.
96- RecommendedRoutineDto recommendedRoutineDto = RecommendedRoutineDto .builder ()
97- .recommendedRoutineId (recommendedRoutine .getRecommendedRoutineId ())
98- .recommendedRoutineName (recommendedRoutine .getRecommendedRoutineName ())
99- .routineDescription (recommendedRoutine .getRecommendedRoutineDescription ())
100- .recommendedSubRoutines (recommendedRoutineDetailDtoList )
101- .build ();
102- recommendedRoutineDtoList .add (recommendedRoutineDto );
103- }
104-
105- RegisterEmotionMarbleResponse response = RegisterEmotionMarbleResponse .builder ()
64+ return RegisterEmotionMarbleResponse .builder ()
10665 .recommendedRoutines (recommendedRoutineDtoList )
10766 .build ();
108- return response ;
10967 }
68+
69+
11070}
0 commit comments