Skip to content

Commit 9c6db03

Browse files
authored
Merge pull request #92 from Nexters/dev
Dev
2 parents bfae901 + 06358b7 commit 9c6db03

File tree

4 files changed

+62
-70
lines changed

4 files changed

+62
-70
lines changed

src/main/java/donmani/donmani_server/expense/service/ExpenseService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ public void addExpense(ExpenseRequestDTO request) {
7474

7575
expenseRepository.saveAll(expenses);
7676

77-
// 피드백 카드 / 선물 받기
77+
// 피드백 카드 받기 & 선물 받기
7878
feedbackService.addFeedback(request);
79-
feedbackService.openFeedback(request.getUserKey());
79+
feedbackService.openFeedback(request);
8080
rewardService.acquireRandomItems(request.getUserKey(), request.getRecords().get(0).getDate());
8181
}
8282

src/main/java/donmani/donmani_server/feedback/provider/FeedbackTemplateProvider.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@ public void init() {
177177
new FeedbackTemplate("실수에서 찾은 기준", "이 경험 덕분에 다음 선택은\n조금 더 선명해질 거야"),
178178
new FeedbackTemplate("이건 나를 위한 과정", "실수한 날 자세히 기록해두자\n그래야 배운 과정이 보여\n")
179179
));
180+
181+
// 무소비
182+
templateMap.put(CategoryType.NONE, List.of(
183+
new FeedbackTemplate("지름신 방어 완료!", "지갑 지켜낸 오늘,\n완전 뿌듯하지? 😎"),
184+
new FeedbackTemplate("텐션 유지력 만렙", "안 써도\n기분 좋은 하루였어! 🙌"),
185+
new FeedbackTemplate("습관 설계자 등장", "이렇게 하루하루 쌓으면\n진짜 바뀐다 ✨"),
186+
new FeedbackTemplate("오늘도 잘 참았다!", "쉽지 않은 선택을 해낸\n너에게 박수! 👏👏"),
187+
new FeedbackTemplate("오늘의 승자는 바로 너!", "의지력 무엇?!\n오늘도 성공! 🏆")
188+
));
180189
}
181190

182191
public List<FeedbackTemplate> getTemplates(CategoryType category) {

src/main/java/donmani/donmani_server/feedback/service/FeedbackService.java

Lines changed: 46 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Random;
88
import java.util.stream.Collectors;
99

10+
import donmani.donmani_server.expense.entity.CategoryType;
1011
import donmani.donmani_server.expense.repository.ExpenseRepository;
1112
import org.springframework.stereotype.Service;
1213
import 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;

src/main/java/donmani/donmani_server/reward/service/RewardService.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,18 @@ public void acquireRandomItems(String userKey, LocalDate reqDate) {
7070
.filter(item -> !acquiredItems.contains(item))
7171
.collect(Collectors.toList());
7272

73-
RewardItem selected = availableRewards.get(new Random().nextInt(availableRewards.size()));
73+
if (!availableRewards.isEmpty()) {
74+
RewardItem selected = availableRewards.get(new Random().nextInt(availableRewards.size()));
7475

75-
UserItem newUserItem = UserItem.builder()
76+
UserItem newUserItem = UserItem.builder()
7677
.user(user)
7778
.item(selected)
7879
.acquiredAt(LocalDateTime.now(ZoneId.of("Asia/Seoul")))
7980
.isOpened(false)
8081
.build();
8182

82-
userItemRepository.save(newUserItem);
83+
userItemRepository.save(newUserItem);
84+
}
8385
}
8486

8587
/**

0 commit comments

Comments
 (0)