|
1 | 1 | package com.back.global.initData; |
2 | 2 |
|
| 3 | +import com.back.domain.board.comment.entity.Comment; |
| 4 | +import com.back.domain.board.comment.repository.CommentRepository; |
| 5 | +import com.back.domain.board.post.entity.Post; |
| 6 | +import com.back.domain.board.post.entity.PostCategory; |
| 7 | +import com.back.domain.board.post.repository.PostCategoryRepository; |
| 8 | +import com.back.domain.board.post.repository.PostRepository; |
3 | 9 | import com.back.domain.user.entity.User; |
4 | 10 | import com.back.domain.user.entity.UserProfile; |
5 | 11 | import com.back.domain.user.entity.UserStatus; |
|
13 | 19 | import org.springframework.security.crypto.password.PasswordEncoder; |
14 | 20 | import org.springframework.transaction.annotation.Transactional; |
15 | 21 |
|
| 22 | +import java.util.List; |
| 23 | + |
16 | 24 | @Configuration |
| 25 | +@Profile("default") |
17 | 26 | @RequiredArgsConstructor |
18 | 27 | public class DevInitData { |
19 | 28 | private final UserRepository userRepository; |
| 29 | + private final PostRepository postRepository; |
| 30 | + private final CommentRepository commentRepository; |
| 31 | + private final PostCategoryRepository postCategoryRepository; |
20 | 32 | private final PasswordEncoder passwordEncoder; |
21 | 33 | private final Environment environment; |
| 34 | + |
22 | 35 | @Bean |
23 | 36 | ApplicationRunner DevInitDataApplicationRunner() { |
24 | 37 | return args -> { |
25 | | - String activeProfile = environment.getProperty("spring.profiles.active", "none"); |
26 | | - if (!"default".equals(activeProfile)) { |
27 | | - return; // default 환경이 아니면 실행하지 않음 |
28 | | - } |
29 | | - initUsers(); |
| 38 | + initUsersAndPostsAndComments(); |
30 | 39 | }; |
31 | 40 | } |
32 | 41 |
|
33 | 42 | @Transactional |
34 | | - public void initUsers() { |
| 43 | + public void initUsersAndPostsAndComments() { |
35 | 44 | if (userRepository.count() == 0) { |
36 | | - User admin = User.createAdmin( |
37 | | - "admin", |
38 | | - |
39 | | - passwordEncoder.encode("12345678!") |
40 | | - ); |
| 45 | + // -------------------- 유저 -------------------- |
| 46 | + User admin = User. createAdmin( "admin", "[email protected]", passwordEncoder. encode( "12345678!")); |
41 | 47 | admin.setUserProfile(new UserProfile(admin, "관리자", null, null, null, 0)); |
42 | 48 | userRepository.save(admin); |
43 | 49 |
|
44 | | - User user1 = User.createUser( |
45 | | - "user1", |
46 | | - |
47 | | - passwordEncoder.encode("12345678!") |
48 | | - ); |
| 50 | + User user1 = User. createUser( "user1", "[email protected]", passwordEncoder. encode( "12345678!")); |
49 | 51 | user1.setUserProfile(new UserProfile(user1, "사용자1", null, null, null, 0)); |
50 | 52 | user1.setUserStatus(UserStatus.ACTIVE); |
51 | 53 | userRepository.save(user1); |
52 | 54 |
|
53 | | - User user2 = User.createUser( |
54 | | - "user2", |
55 | | - |
56 | | - passwordEncoder.encode("12345678!") |
57 | | - ); |
| 55 | + User user2 = User. createUser( "user2", "[email protected]", passwordEncoder. encode( "12345678!")); |
58 | 56 | user2.setUserProfile(new UserProfile(user2, "사용자2", null, null, null, 0)); |
59 | 57 | user2.setUserStatus(UserStatus.ACTIVE); |
60 | 58 | userRepository.save(user2); |
| 59 | + |
| 60 | + User user3 = User. createUser( "user3", "[email protected]", passwordEncoder. encode( "12345678!")); |
| 61 | + user3.setUserProfile(new UserProfile(user3, "사용자3", null, null, null, 0)); |
| 62 | + user3.setUserStatus(UserStatus.ACTIVE); |
| 63 | + userRepository.save(user3); |
| 64 | + |
| 65 | + // -------------------- 게시글 -------------------- |
| 66 | + createSamplePosts(user1, user2, user3); |
| 67 | + } |
| 68 | + } |
| 69 | + |
| 70 | + private void createSamplePosts(User user1, User user2, User user3) { |
| 71 | + Post post1 = new Post(user1, |
| 72 | + "[백엔드] 같이 스프링 공부하실 분 구해요!", |
| 73 | + "매주 토요일 오후 2시에 온라인으로 스터디 진행합니다.\n교재는 '스프링 완전정복'을 사용할 예정입니다."); |
| 74 | + attachCategories(post1, List.of("백엔드", "직장인", "5~10명")); |
| 75 | + |
| 76 | + Post post2 = new Post(user2, |
| 77 | + "[프론트엔드] 리액트 입문 스터디원 모집", |
| 78 | + "리액트 교재를 같이 읽고 실습해보는 스터디입니다. GitHub로 코드 리뷰도 진행합니다."); |
| 79 | + attachCategories(post2, List.of("프론트엔드", "대학생", "2~4명")); |
| 80 | + |
| 81 | + Post post3 = new Post(user2, |
| 82 | + "[CS] 컴퓨터 구조 스터디", |
| 83 | + "운영체제, 네트워크, 컴퓨터 구조 기본 개념을 함께 정리해요.\n스터디원 5명 정도 모집합니다."); |
| 84 | + attachCategories(post3, List.of("CS", "취준생", "5~10명")); |
| 85 | + |
| 86 | + Post post4 = new Post(user3, |
| 87 | + "[알고리즘] 백준 골드 도전 스터디", |
| 88 | + "매주 3문제씩 풀이, 코드 리뷰 및 전략 공유합니다.\n실력 향상을 목표로 합니다!"); |
| 89 | + attachCategories(post4, List.of("알고리즘", "대학생", "5~10명")); |
| 90 | + |
| 91 | + Post post5 = new Post(user1, |
| 92 | + "[영어 회화] 직장인 아침 스터디", |
| 93 | + "출근 전 30분, 영어회화 연습 스터디입니다.\n줌으로 진행하고 서로 피드백 나눠요 :)"); |
| 94 | + attachCategories(post5, List.of("영어 회화", "직장인", "2~4명")); |
| 95 | + |
| 96 | + postRepository.saveAll(List.of(post1, post2, post3, post4, post5)); |
| 97 | + |
| 98 | + // -------------------- 댓글 -------------------- |
| 99 | + createSampleComments(user1, user2, user3, post1, post2, post3); |
| 100 | + } |
| 101 | + |
| 102 | + private void createSampleComments(User user1, User user2, User user3, Post post1, Post post2, Post post3) { |
| 103 | + // Post1에 댓글 |
| 104 | + Comment comment1 = new Comment(post1, user2, "저도 참여하고 싶어요!"); |
| 105 | + Comment reply1 = new Comment(post1, user1, "좋아요 :) 디스코드 링크 드릴게요.", comment1); |
| 106 | + |
| 107 | + // Post2에 댓글 |
| 108 | + Comment comment2 = new Comment(post2, user3, "스터디 모집 기간은 언제까지인가요?"); |
| 109 | + Comment reply2 = new Comment(post2, user2, "이번 주 일요일까지 받을 예정이에요.", comment2); |
| 110 | + |
| 111 | + // Post3에 댓글 |
| 112 | + Comment comment3 = new Comment(post3, user1, "CS는 항상 중요하죠 💪"); |
| 113 | + |
| 114 | + commentRepository.saveAll(List.of(comment1, reply1, comment2, reply2, comment3)); |
| 115 | + |
| 116 | + // 게시글 commentCount 반영 |
| 117 | + post1.increaseCommentCount(); |
| 118 | + post2.increaseCommentCount(); |
| 119 | + post3.increaseCommentCount(); |
| 120 | + |
| 121 | + postRepository.saveAll(List.of(post1, post2, post3)); |
| 122 | + } |
| 123 | + |
| 124 | + private void attachCategories(Post post, List<String> categoryNames) { |
| 125 | + List<PostCategory> categories = postCategoryRepository.findAllByNameIn(categoryNames); |
| 126 | + if (!categories.isEmpty()) { |
| 127 | + post.updateCategories(categories); |
61 | 128 | } |
62 | 129 | } |
63 | 130 | } |
0 commit comments