11package com .back .global .initData ;
22
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 ;
9- import com .back .domain .user .entity .User ;
10- import com .back .domain .user .entity .UserProfile ;
11- import com .back .domain .user .entity .UserStatus ;
12- import com .back .domain .user .repository .UserRepository ;
133import lombok .RequiredArgsConstructor ;
144import org .springframework .boot .ApplicationRunner ;
155import org .springframework .context .annotation .Bean ;
166import org .springframework .context .annotation .Configuration ;
177import org .springframework .context .annotation .Profile ;
188import org .springframework .core .io .ClassPathResource ;
199import org .springframework .jdbc .datasource .init .ResourceDatabasePopulator ;
20- import org .springframework .security .crypto .password .PasswordEncoder ;
21- import org .springframework .transaction .annotation .Transactional ;
2210
2311import javax .sql .DataSource ;
2412import java .sql .Connection ;
2513import java .sql .ResultSet ;
2614import java .sql .Statement ;
27- import java .util .List ;
2815
2916@ Configuration
3017@ Profile ("default" )
3118@ RequiredArgsConstructor
3219public class DevInitData {
3320 private final DataSource dataSource ;
34- private final UserRepository userRepository ;
35- private final PostRepository postRepository ;
36- private final CommentRepository commentRepository ;
37- private final PostCategoryRepository postCategoryRepository ;
38- private final PasswordEncoder passwordEncoder ;
21+ private final DevInitService devInitService ;
3922
4023 @ Bean
4124 ApplicationRunner DevInitDataApplicationRunner () {
4225 return args -> {
43- initialize ();
26+ runDataSql ();
27+ devInitService .init ();
4428 };
4529 }
4630
47- public void initialize () {
48- runDataSql ();
49- initUsersAndPostsAndComments ();
50- }
51-
5231 private void runDataSql () {
5332 try (Connection connection = dataSource .getConnection ()) {
5433 connection .setAutoCommit (true );
5534 Statement stmt = connection .createStatement ();
5635
5736 // post_category 테이블에 데이터 있는지 확인
58- long count = postCategoryRepository .count ();
37+ ResultSet rs = stmt .executeQuery ("SELECT COUNT(*) FROM post_category" );
38+ rs .next ();
39+ long count = rs .getLong (1 );
5940
6041 if (count == 0 ) {
6142 // 데이터가 없으면 data.sql 실행
@@ -74,98 +55,4 @@ private void runDataSql() {
7455 System .err .println ("⚠️ data.sql execution failed: " + e .getMessage ());
7556 }
7657 }
77-
78- @ Transactional
79- public void initUsersAndPostsAndComments () {
80- if (userRepository .count () == 0 ) {
81- // -------------------- 유저 --------------------
82- User admin =
User .
createAdmin (
"admin" ,
"[email protected] " ,
passwordEncoder .
encode (
"12345678!" ));
83- admin .setUserProfile (new UserProfile (admin , "관리자" , null , null , null , 0 ));
84- userRepository .save (admin );
85-
86- User user1 =
User .
createUser (
"user1" ,
"[email protected] " ,
passwordEncoder .
encode (
"12345678!" ));
87- user1 .setUserProfile (new UserProfile (user1 , "사용자1" , null , null , null , 0 ));
88- user1 .setUserStatus (UserStatus .ACTIVE );
89- userRepository .save (user1 );
90-
91- User user2 =
User .
createUser (
"user2" ,
"[email protected] " ,
passwordEncoder .
encode (
"12345678!" ));
92- user2 .setUserProfile (new UserProfile (user2 , "사용자2" , null , null , null , 0 ));
93- user2 .setUserStatus (UserStatus .ACTIVE );
94- userRepository .save (user2 );
95-
96- User user3 =
User .
createUser (
"user3" ,
"[email protected] " ,
passwordEncoder .
encode (
"12345678!" ));
97- user3 .setUserProfile (new UserProfile (user3 , "사용자3" , null , null , null , 0 ));
98- user3 .setUserStatus (UserStatus .ACTIVE );
99- userRepository .save (user3 );
100-
101- // -------------------- 게시글 --------------------
102- createSamplePosts (user1 , user2 , user3 );
103- }
104- }
105-
106- private void createSamplePosts (User user1 , User user2 , User user3 ) { // ⭐ @Transactional 제거
107- Post post1 = new Post (user1 ,
108- "[백엔드] 같이 스프링 공부하실 분 구해요!" ,
109- "매주 토요일 오후 2시에 온라인으로 스터디 진행합니다.\n 교재는 '스프링 완전정복'을 사용할 예정입니다." ,
110- null );
111- attachCategories (post1 , List .of ("백엔드" , "직장인" , "5~10명" ));
112-
113- Post post2 = new Post (user2 ,
114- "[프론트엔드] 리액트 입문 스터디원 모집" ,
115- "리액트 교재를 같이 읽고 실습해보는 스터디입니다. GitHub로 코드 리뷰도 진행합니다." ,
116- null );
117- attachCategories (post2 , List .of ("프론트엔드" , "대학생" , "2~4명" ));
118-
119- Post post3 = new Post (user2 ,
120- "[CS] 컴퓨터 구조 스터디" ,
121- "운영체제, 네트워크, 컴퓨터 구조 기본 개념을 함께 정리해요.\n 스터디원 5명 정도 모집합니다." ,
122- null );
123- attachCategories (post3 , List .of ("CS" , "취준생" , "5~10명" ));
124-
125- Post post4 = new Post (user3 ,
126- "[알고리즘] 백준 골드 도전 스터디" ,
127- "매주 3문제씩 풀이, 코드 리뷰 및 전략 공유합니다.\n 실력 향상을 목표로 합니다!" ,
128- null );
129- attachCategories (post4 , List .of ("알고리즘" , "대학생" , "5~10명" ));
130-
131- Post post5 = new Post (user1 ,
132- "[영어 회화] 직장인 아침 스터디" ,
133- "출근 전 30분, 영어회화 연습 스터디입니다.\n 줌으로 진행하고 서로 피드백 나눠요 :)" ,
134- null );
135- attachCategories (post5 , List .of ("영어 회화" , "직장인" , "2~4명" ));
136-
137- postRepository .saveAll (List .of (post1 , post2 , post3 , post4 , post5 ));
138-
139- // -------------------- 댓글 --------------------
140- createSampleComments (user1 , user2 , user3 , post1 , post2 , post3 );
141- }
142-
143- private void createSampleComments (User user1 , User user2 , User user3 , Post post1 , Post post2 , Post post3 ) {
144- // Post1에 댓글
145- Comment comment1 = Comment .createRoot (post1 , user2 , "저도 참여하고 싶어요!" );
146- Comment reply1 = Comment .createChild (post1 , user1 , "좋아요 :) 디스코드 링크 드릴게요." , comment1 );
147-
148- // Post2에 댓글
149- Comment comment2 = Comment .createRoot (post2 , user3 , "스터디 모집 기간은 언제까지인가요?" );
150- Comment reply2 = Comment .createChild (post2 , user2 , "이번 주 일요일까지 받을 예정이에요." , comment2 );
151-
152- // Post3에 댓글
153- Comment comment3 = Comment .createRoot (post3 , user1 , "CS는 항상 중요하죠 💪" );
154-
155- commentRepository .saveAll (List .of (comment1 , reply1 , comment2 , reply2 , comment3 ));
156-
157- // 게시글 commentCount 반영
158- post1 .increaseCommentCount ();
159- post2 .increaseCommentCount ();
160- post3 .increaseCommentCount ();
161-
162- postRepository .saveAll (List .of (post1 , post2 , post3 ));
163- }
164-
165- private void attachCategories (Post post , List <String > categoryNames ) {
166- List <PostCategory > categories = postCategoryRepository .findAllByNameIn (categoryNames );
167- if (!categories .isEmpty ()) {
168- post .updateCategories (categories );
169- }
170- }
17158}
0 commit comments