77import java .util .Random ;
88import java .util .stream .Collectors ;
99
10+ import donmani .donmani_server .expense .entity .CategoryType ;
1011import donmani .donmani_server .expense .repository .ExpenseRepository ;
1112import org .springframework .stereotype .Service ;
1213import org .springframework .transaction .annotation .Transactional ;
@@ -49,20 +50,19 @@ public void addFeedback(ExpenseRequestDTO requestDTO) {
4950 Expense expense = expenseRepository .findExpenseByUserIdAndAndCreatedAt (user .getId (), createdAt );
5051
5152 // GOOD, BAD 일 경우 feedback 생성
52- if (expense .getFlag () != null ) {
53- Feedback feedback = Feedback
54- .builder ()
55- .createdDate (localDateTime )
56- .updateDate (localDateTime )
57- .user (user )
58- .expense (expense )
59- .isOpened (false )
60- .title (null )
61- .content (null )
62- .build ();
63-
64- feedbackRepository .save (feedback );
65- }
53+ // 무소비일때도 feedback 생성
54+ Feedback feedback = Feedback
55+ .builder ()
56+ .createdDate (localDateTime )
57+ .updateDate (localDateTime )
58+ .user (user )
59+ .expense (expense )
60+ .isOpened (false )
61+ .title (null )
62+ .content (null )
63+ .build ();
64+
65+ feedbackRepository .save (feedback );
6666 }
6767 }
6868
@@ -95,73 +95,54 @@ public Boolean isFirstOpenedFeedback(String userKey) {
9595 return feedbacks == null || feedbacks .isEmpty () ? true : false ;
9696 }
9797
98- public FeedbackOpenResponseDTO openFeedback (String userKey ) {
98+ public void openFeedback (ExpenseRequestDTO request ) {
9999 LocalDateTime localDateTime = LocalDateTime .now (ZoneId .of ("Asia/Seoul" ));
100100
101- User user = userService .getUser (userKey );
101+ User user = userService .getUser (request . getUserKey () );
102102
103103 // 1. 열지 않은 피드백 확인
104104 // - 최근 생성된 피드백부터 내림차순으로 정렬
105105 List <Feedback > feedbacks = feedbackRepository .findFeedbackByUserIdOrderByCreatedDateDesc (user .getId ());
106106
107- if (feedbacks == null || feedbacks .isEmpty () || feedbacks .get (0 ).isOpened ()) {
108- throw new EntityNotFoundException ("모든 피드백을 열었습니다." );
109- }
110-
111- Feedback notOpenedFeedback = feedbacks .get (0 );
112-
113- // 2. 피드백에 해당하는 기록 확인
114- // Expense expense = expenseService.getExpense(notOpenedFeedback.getId());
107+ if (!feedbacks .isEmpty () && !feedbacks .get (0 ).isOpened ()) {
108+ Feedback notOpenedFeedback = feedbacks .get (0 );
115109
116- // 3. 오늘 기록인지 어제 기록인지 확인 -> flagType
117- DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyyMMdd" );
118- Boolean isToday = notOpenedFeedback .getExpense ().getCreatedAt ().format (formatter ).equals (localDateTime .format (formatter ));
110+ // 2. 획득한 피드백의 템플릿 확인
111+ List <FeedbackTemplate > remainTemplates ;
119112
120- // 3. 획득한 피드백의 템플릿 확인
121- List <FeedbackTemplate > remainTemplates ;
113+ List <String > usedTitles = feedbackRepository .findFeedbackByUserIdUsedTitle (user .getId ());
122114
123- List <String > usedTitles = feedbackRepository .findFeedbackByUserIdUsedTitle (user .getId ());
115+ // 3. 해당 카테고리에 해당하는 템플릿 전체
116+ List <FeedbackTemplate > allTemplates = feedbackTemplateProvider .getTemplates (notOpenedFeedback .getExpense ().getCategory () == null ? CategoryType .NONE : notOpenedFeedback .getExpense ().getCategory ());
124117
125- // 4. 해당 카테고리에 해당하는 템플릿 전체
126- List <FeedbackTemplate > allTemplates = feedbackTemplateProvider .getTemplates (notOpenedFeedback .getExpense ().getCategory ());
118+ // 4. 이미 사용된 템플릿 제외
119+ if (usedTitles .isEmpty ()) {
120+ remainTemplates = allTemplates ;
121+ } else {
122+ List <FeedbackTemplate > notUsedTemplates = allTemplates
123+ .stream ()
124+ .filter (feedbackTemplate -> !usedTitles
125+ .contains (feedbackTemplate .getTitle ())
126+ )
127+ .collect (Collectors .toList ());
127128
128- // 5. 이미 사용된 템플릿 제외
129- if (usedTitles .isEmpty ()) {
130- remainTemplates = allTemplates ;
131- } else {
132- List <FeedbackTemplate > notUsedTemplates = allTemplates
133- .stream ()
134- .filter (feedbackTemplate -> !usedTitles
135- .contains (feedbackTemplate .getTitle ())
136- )
137- .collect (Collectors .toList ());
129+ // 모두 사용했으면 해당 카테고리에 해당하는 템플릿 전체
130+ if (notUsedTemplates .isEmpty ()) {
131+ notUsedTemplates = allTemplates ;
132+ }
138133
139- // 모두 사용했으면 해당 카테고리에 해당하는 템플릿 전체
140- if (notUsedTemplates .isEmpty ()) {
141- notUsedTemplates = allTemplates ;
134+ remainTemplates = notUsedTemplates ;
142135 }
143136
144- remainTemplates = notUsedTemplates ;
145- }
146-
147- // 6. 이전 피드백과 겹치지 않게 피드백 update
148- FeedbackTemplate remainTemplate = remainTemplates .get (new Random ().nextInt (remainTemplates .size ()));
137+ // 5. 이전 피드백과 겹치지 않게 피드백 update
138+ FeedbackTemplate remainTemplate = remainTemplates .get (new Random ().nextInt (remainTemplates .size ()));
149139
150- notOpenedFeedback .setTitle (remainTemplate .getTitle ());
151- notOpenedFeedback .setContent (remainTemplate .getContent ());
152- // notOpenedFeedback.setOpened(true);
153- // notOpenedFeedback.setUpdateDate(localDateTime);
140+ notOpenedFeedback .setTitle (remainTemplate .getTitle ());
141+ notOpenedFeedback .setContent (remainTemplate .getContent ());
142+ notOpenedFeedback .setUpdateDate (localDateTime );
154143
155- feedbackRepository .save (notOpenedFeedback );
156-
157- FeedbackOpenResponseDTO response = new FeedbackOpenResponseDTO (
158- notOpenedFeedback .getTitle (),
159- notOpenedFeedback .getContent (),
160- notOpenedFeedback .getUser ().getName (),
161- notOpenedFeedback .getExpense ().getCategory (),
162- isToday );
163-
164- return response ;
144+ feedbackRepository .save (notOpenedFeedback );
145+ }
165146 }
166147
167148 @ Transactional (readOnly = true )
@@ -177,7 +158,7 @@ public FeedbackOpenResponseDTO getNotOpenedFeedbackContent(String userKey) {
177158 notOpenedFeedback .getTitle (),
178159 notOpenedFeedback .getContent (),
179160 notOpenedFeedback .getUser ().getName (),
180- notOpenedFeedback .getExpense ().getCategory (),
161+ notOpenedFeedback .getExpense ().getCategory () == null ? CategoryType . NONE : notOpenedFeedback . getExpense (). getCategory () ,
181162 isToday );
182163
183164 return response ;
0 commit comments