Skip to content

Commit 727127c

Browse files
committed
refactor: DevInitData에서 칵테일 초기화 로직 제거 및 MyBarInit 로직 개선
1 parent 0c865e8 commit 727127c

File tree

1 file changed

+60
-81
lines changed

1 file changed

+60
-81
lines changed

src/main/java/com/back/global/init/DevInitData.java

Lines changed: 60 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package com.back.global.init;
22

3+
import com.back.domain.cocktail.entity.Cocktail;
4+
import com.back.domain.cocktail.repository.CocktailRepository;
35
import com.back.domain.notification.entity.Notification;
46
import com.back.domain.notification.enums.NotificationType;
57
import com.back.domain.notification.repository.NotificationRepository;
6-
import com.back.domain.cocktail.entity.Cocktail;
7-
import com.back.domain.cocktail.enums.AlcoholBaseType;
8-
import com.back.domain.cocktail.enums.AlcoholStrength;
9-
import com.back.domain.cocktail.enums.CocktailType;
10-
import com.back.domain.cocktail.repository.CocktailRepository;
118
import com.back.domain.post.category.entity.Category;
129
import com.back.domain.post.category.repository.CategoryRepository;
1310
import com.back.domain.post.comment.entity.Comment;
@@ -19,14 +16,14 @@
1916
import com.back.domain.post.post.repository.PostRepository;
2017
import com.back.domain.user.entity.User;
2118
import com.back.domain.user.repository.UserRepository;
22-
import org.springframework.transaction.annotation.Transactional;
2319
import lombok.RequiredArgsConstructor;
2420
import org.springframework.beans.factory.annotation.Autowired;
2521
import org.springframework.boot.ApplicationRunner;
2622
import org.springframework.context.annotation.Bean;
2723
import org.springframework.context.annotation.Configuration;
2824
import org.springframework.context.annotation.Lazy;
2925
import org.springframework.context.annotation.Profile;
26+
import org.springframework.transaction.annotation.Transactional;
3027

3128
@Configuration
3229
@Profile("dev")
@@ -50,7 +47,6 @@ public class DevInitData {
5047
@Bean
5148
ApplicationRunner devInitDataApplicationRunner() {
5249
return args -> {
53-
self.cocktailInit();
5450
self.userInit();
5551
// myBar는 사용자 활성 상태 기준으로 초기화가 필요하므로 boardInit(soft delete)보다 먼저 실행
5652
self.myBarInit();
@@ -59,59 +55,6 @@ ApplicationRunner devInitDataApplicationRunner() {
5955
};
6056
}
6157

62-
@Transactional
63-
public void cocktailInit() {
64-
if (cocktailRepository.count() > 0) return;
65-
66-
// 1) 하이볼
67-
cocktailRepository.save(Cocktail.builder()
68-
.cocktailName("Highball")
69-
.cocktailNameKo("하이볼")
70-
.alcoholStrength(AlcoholStrength.LIGHT)
71-
.cocktailType(CocktailType.LONG)
72-
.alcoholBaseType(AlcoholBaseType.WHISKY)
73-
.ingredient("위스키, 탄산수, 얼음, 레몬피")
74-
.recipe("잔에 얼음 → 위스키 → 탄산수 → 가볍게 스터")
75-
.cocktailImgUrl("/img/cocktail/1.jpg")
76-
.build());
77-
78-
// 2) 진토닉
79-
cocktailRepository.save(Cocktail.builder()
80-
.cocktailName("Gin and Tonic")
81-
.cocktailNameKo("진토닉")
82-
.alcoholStrength(AlcoholStrength.WEAK)
83-
.cocktailType(CocktailType.LONG)
84-
.alcoholBaseType(AlcoholBaseType.GIN)
85-
.ingredient("진, 토닉워터, 얼음, 라임")
86-
.recipe("잔에 얼음 → 진 → 토닉워터 → 라임")
87-
.cocktailImgUrl("/img/cocktail/2.jpg")
88-
.build());
89-
90-
// 3) 올드패션드
91-
cocktailRepository.save(Cocktail.builder()
92-
.cocktailName("Old Fashioned")
93-
.cocktailNameKo("올드패션드")
94-
.alcoholStrength(AlcoholStrength.STRONG)
95-
.cocktailType(CocktailType.SHORT)
96-
.alcoholBaseType(AlcoholBaseType.WHISKY)
97-
.ingredient("버번 위스키, 설탕/시럽, 앙고스투라 비터스, 오렌지 필")
98-
.recipe("시럽+비터스 → 위스키 → 얼음 → 스터 → 오렌지 필")
99-
.cocktailImgUrl("/img/cocktail/3.jpg")
100-
.build());
101-
102-
// 4) 모히또
103-
cocktailRepository.save(Cocktail.builder()
104-
.cocktailName("Mojito")
105-
.cocktailNameKo("모히또")
106-
.alcoholStrength(AlcoholStrength.LIGHT)
107-
.cocktailType(CocktailType.LONG)
108-
.alcoholBaseType(AlcoholBaseType.RUM)
109-
.ingredient("라임, 민트, 설탕/시럽, 화이트 럼, 탄산수, 얼음")
110-
.recipe("라임+민트+시럽 머들 → 럼 → 얼음 → 탄산수")
111-
.cocktailImgUrl("/img/cocktail/4.jpg")
112-
.build());
113-
}
114-
11558
@Transactional
11659
public void userInit() {
11760
userRepository.findByNickname("사용자A").orElseGet(() ->
@@ -275,32 +218,68 @@ public void myBarInit() {
275218
User userB = userRepository.findByNickname("사용자B").orElseThrow();
276219
User userC = userRepository.findByNickname("사용자C").orElseThrow();
277220

278-
// 칵테일 참조 준비
279-
var cocktails = cocktailRepository.findAll();
280-
Cocktail c1 = cocktails.stream().filter(c -> "하이볼".equals(c.getCocktailNameKo())).findFirst().orElse(null);
281-
Cocktail c2 = cocktails.stream().filter(c -> "진토닉".equals(c.getCocktailNameKo())).findFirst().orElse(null);
282-
Cocktail c3 = cocktails.stream().filter(c -> "올드패션드".equals(c.getCocktailNameKo())).findFirst().orElse(null);
283-
Cocktail c4 = cocktails.stream().filter(c -> "모히또".equals(c.getCocktailNameKo())).findFirst().orElse(null);
284-
285-
// 방어: 칵테일 누락 시 스킵
286-
if (c1 == null || c2 == null || c3 == null || c4 == null) return;
221+
// 칵테일 참조 준비: 이름 우선 매칭, 부족하면 ID 오름차순으로 보충
222+
var all = cocktailRepository.findAll();
223+
if (all.isEmpty()) return; // 칵테일 데이터 없으면 스킵
224+
225+
java.util.List<String> prefer = java.util.List.of("하이볼", "진토닉", "올드패션드", "모히또");
226+
java.util.List<Cocktail> selected = new java.util.ArrayList<>();
227+
228+
// 선호 이름 매칭
229+
for (String nameKo : prefer) {
230+
all.stream()
231+
.filter(c -> nameKo.equals(c.getCocktailNameKo()))
232+
.findFirst()
233+
.ifPresent(c -> {
234+
if (selected.stream().noneMatch(s -> java.util.Objects.equals(s.getId(), c.getId()))) {
235+
selected.add(c);
236+
}
237+
});
238+
}
239+
240+
// 부족분 보충: ID 오름차순으로 정렬 후 채우기
241+
all.stream()
242+
.sorted(java.util.Comparator.comparingLong(c -> c.getId() == null ? Long.MAX_VALUE : c.getId()))
243+
.forEach(c -> {
244+
if (selected.size() < 4 && selected.stream().noneMatch(s -> java.util.Objects.equals(s.getId(), c.getId()))) {
245+
selected.add(c);
246+
}
247+
});
248+
249+
// 실제 사용에 필요한 인덱스가 없으면 해당 동작을 스킵
250+
Cocktail c1 = selected.size() > 0 ? selected.get(0) : null;
251+
Cocktail c2 = selected.size() > 1 ? selected.get(1) : null;
252+
Cocktail c3 = selected.size() > 2 ? selected.get(2) : null;
253+
Cocktail c4 = selected.size() > 3 ? selected.get(3) : null;
287254

288255
// A: c1(now-2d), c2(now-1d)
289-
myBarService.keep(userA.getId(), c1.getId());
290-
myBarService.keep(userA.getId(), c2.getId());
291-
myBarRepository.findByUser_IdAndCocktail_Id(userA.getId(), c1.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(2)));
292-
myBarRepository.findByUser_IdAndCocktail_Id(userA.getId(), c2.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(1)));
256+
if (c1 != null) {
257+
myBarService.keep(userA.getId(), c1.getId());
258+
myBarRepository.findByUser_IdAndCocktail_Id(userA.getId(), c1.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(2)));
259+
}
260+
if (c2 != null) {
261+
myBarService.keep(userA.getId(), c2.getId());
262+
myBarRepository.findByUser_IdAndCocktail_Id(userA.getId(), c2.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(1)));
263+
}
293264

294265
// B: c3 keep 후 unkeep -> DELETED
295-
myBarService.keep(userB.getId(), c3.getId());
296-
myBarService.unkeep(userB.getId(), c3.getId());
266+
if (c3 != null) {
267+
myBarService.keep(userB.getId(), c3.getId());
268+
myBarService.unkeep(userB.getId(), c3.getId());
269+
}
297270

298271
// C: c2(now-3d), c3(now-2d), c4(now-1h)
299-
myBarService.keep(userC.getId(), c2.getId());
300-
myBarService.keep(userC.getId(), c3.getId());
301-
myBarService.keep(userC.getId(), c4.getId());
302-
myBarRepository.findByUser_IdAndCocktail_Id(userC.getId(), c2.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(3)));
303-
myBarRepository.findByUser_IdAndCocktail_Id(userC.getId(), c3.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(2)));
304-
myBarRepository.findByUser_IdAndCocktail_Id(userC.getId(), c4.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusHours(1)));
272+
if (c2 != null) {
273+
myBarService.keep(userC.getId(), c2.getId());
274+
myBarRepository.findByUser_IdAndCocktail_Id(userC.getId(), c2.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(3)));
275+
}
276+
if (c3 != null) {
277+
myBarService.keep(userC.getId(), c3.getId());
278+
myBarRepository.findByUser_IdAndCocktail_Id(userC.getId(), c3.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusDays(2)));
279+
}
280+
if (c4 != null) {
281+
myBarService.keep(userC.getId(), c4.getId());
282+
myBarRepository.findByUser_IdAndCocktail_Id(userC.getId(), c4.getId()).ifPresent(m -> m.setKeptAt(java.time.LocalDateTime.now().minusHours(1)));
283+
}
305284
}
306285
}

0 commit comments

Comments
 (0)