@@ -196,9 +196,7 @@ public String generateInitScene(Long storyId, StoryRequestDTO.StoryWorldViewRequ
196196 }
197197
198198 // 2-1. personalities 문자열 리스트로 변환
199- List <String > personalities = storyCharacter .getCharacterPersonalities ().stream ()
200- .map (cp -> cp .getPersonality ().getPersonality ())
201- .collect (Collectors .toList ());
199+ List <String > personalities = extractPersonalities (storyCharacter );
202200
203201 // 3. FastAPI 요청용 JSON 만들기
204202 StoryRequestDTO .FastApiInitStoryRequestDTO requestDto = StoryRequestDTO .FastApiInitStoryRequestDTO .builder ()
@@ -216,14 +214,8 @@ public String generateInitScene(Long storyId, StoryRequestDTO.StoryWorldViewRequ
216214 // 5. 장르 저장
217215 story .updateGenre (request .getGenre ());
218216
219-
220217 // 6. 첫 장면 저장 (page=1)
221- Scene scene = Scene .builder ()
222- .page (1 )
223- .content (initStory )
224- .build ();
225-
226- story .addScene (scene );
218+ saveNewScene (story ,1 ,initStory );
227219
228220 // 7. 줄거리 반환
229221 return initStory ;
@@ -236,38 +228,19 @@ public String generateInitScene(Long storyId, StoryRequestDTO.StoryWorldViewRequ
236228 public String generateNextScene (Long storyId , int pageNum ) {
237229 // 1. 이전 줄거리 조회
238230 Scene prevScene = findMyScene (storyId , pageNum -1 );
239- String previousContent = prevScene .getContent ();
240231
241232 // 2. Story & Character 조회
242233 Story story = prevScene .getStory ();
243234 StoryCharacter character = story .getCharacter ();
244235
245- // 3. Personality 추출
246- List <String > personalities = character .getCharacterPersonalities ().stream ()
247- .map (cp -> cp .getPersonality ().getPersonality ())
248- .collect (Collectors .toList ());
249-
250- // 4. DTO 조립 및 FastAPI 호출
251- StoryRequestDTO .NextStoryGenerateRequestDTO dto =
252- StoryRequestDTO .NextStoryGenerateRequestDTO .builder ()
253- .previous (previousContent )
254- .pageNum (pageNum )
255- .genre (story .getGenre ().name ())
256- .name (character .getName ())
257- .age (character .getAge ())
258- .gender (character .getGender ().name ())
259- .personalities (personalities )
260- .build ();
236+ // 3. DTO 조립 및 FastAPI 호출
237+ var dto = buildNextStoryDto (prevScene ,story ,character ,pageNum );
261238
262- // 5 . FastAPI 호출 → 다음 줄거리 생성
239+ // 4 . FastAPI 호출 → 다음 줄거리 생성
263240 String nextContent = storyApiClient .callFastApiForNextStory (dto );
264241
265- // 6. 새 Scene 저장
266- Scene newScene = Scene .builder ()
267- .page (pageNum )
268- .content (nextContent )
269- .build ();
270- story .addScene (newScene );
242+ // 5. 새 Scene 저장
243+ saveNewScene (story ,pageNum ,nextContent );
271244
272245 return nextContent ;
273246 }
@@ -276,25 +249,27 @@ public String generateNextScene(Long storyId, int pageNum) {
276249 @ Transactional (readOnly = true )
277250 public String generateQuestionFromPreviousScene (Long storyId , int pageNum ) {
278251 Scene prevScene = findMyScene (storyId , pageNum - 1 );
279- return storyApiClient .callFastApiForQuestion (prevScene .getContent ());
252+ Story story = prevScene .getStory ();
253+ StoryCharacter character = story .getCharacter ();
254+
255+ var dto = buildNextStoryDto (prevScene , story , character , pageNum );
256+ return storyApiClient .callFastApiForQuestion (dto );
280257 }
281258
282259 // 아이의 대답 기반 다음 줄거리 생성
283260 @ Transactional
284- public String generateNextSceneWithAnswer (Long storyId , int pageNum , String answer ) {
261+ public String generateNextSceneWithAnswer (Long storyId , int pageNum , StoryRequestDTO . StoryAnswerRequestDTO request ) {
285262 Scene prevScene = findMyScene (storyId , pageNum - 1 );
286-
287- String nextContent = storyApiClient .callFastApiForNextStoryWithAnswer (prevScene .getContent (), answer );
288-
289263 Story story = prevScene .getStory ();
264+ StoryCharacter character = story .getCharacter ();
265+
266+ var dto = buildNextStoryDto (prevScene , story , character , pageNum );
267+ String nextContent = storyApiClient .callFastApiForNextStoryWithAnswer (dto , request .getQuestion (), request .getAnswer ());
268+ saveNewScene (story , pageNum , nextContent );
290269
291- Scene newScene = Scene .builder ()
292- .page (pageNum )
293- .content (nextContent )
294- .build ();
295- story .addScene (newScene );
296270 return nextContent ;
297271 }
272+
298273 // 장면 프롬프트 및 아이그림 기반 그림 생성
299274 @ Transactional
300275 public String generateImageFromSketch (Long storyId , int pageNum , StoryRequestDTO .SketchImageRequestDTO request ) {
@@ -306,10 +281,10 @@ public String generateImageFromSketch(Long storyId, int pageNum, StoryRequestDTO
306281
307282 // 줄거리 기반 그림 생성
308283 @ Transactional
309- public String generateImageFromPrompt (Long storyId , int pageNum ) {
284+ public String generateImageFromPrompt (Long storyId , int pageNum , StoryRequestDTO . ImagePromptRequestDTO request ) {
310285 Scene scene = findMyScene (storyId , pageNum );
311286
312- String prompt = scene . getContent ();
287+ String prompt = request . getPrompt ();
313288 String imageUrl = storyApiClient .callFastApiForImageFromPrompt (prompt , scene .getStory ().getGenre ().name ());
314289
315290 scene .updateImageUrl (imageUrl );
@@ -357,4 +332,35 @@ public String getSceneText(Long storyId, Long sceneId) {
357332
358333 return scene .getContent ();
359334 }
335+
336+ private List <String > extractPersonalities (StoryCharacter character ) {
337+ return character .getCharacterPersonalities ().stream ()
338+ .map (cp -> cp .getPersonality ().getPersonality ())
339+ .collect (Collectors .toList ());
340+ }
341+
342+ private StoryRequestDTO .NextStoryGenerateRequestDTO buildNextStoryDto (
343+ Scene prevScene , Story story , StoryCharacter character , int pageNum
344+ ) {
345+ return StoryRequestDTO .NextStoryGenerateRequestDTO .builder ()
346+ .previous (prevScene .getContent ())
347+ .pageNum (pageNum )
348+ .genre (story .getGenre ().name ())
349+ .name (character .getName ())
350+ .age (character .getAge ())
351+ .gender (character .getGender ().name ())
352+ .personalities (extractPersonalities (character ))
353+ .build ();
354+ }
355+
356+ private void saveNewScene (Story story , int pageNum , String content ) {
357+ Scene newScene = Scene .builder ()
358+ .page (pageNum )
359+ .content (content )
360+ .build ();
361+ story .addScene (newScene );
362+ }
363+
364+
365+
360366}
0 commit comments