55import everTale .everTale_be .domain .character .entity .enums .Gender ;
66import everTale .everTale_be .domain .character .repository .PersonalityRepository ;
77import everTale .everTale_be .domain .character .repository .StoryCharacterRepository ;
8+ import everTale .everTale_be .domain .easterEgg .entity .EasterEggVoice ;
89import everTale .everTale_be .domain .profile .entity .Enum .ProfileType ;
910import everTale .everTale_be .domain .profile .entity .Profile ;
1011import everTale .everTale_be .domain .profile .repository .ProfileRepository ;
3132
3233import java .util .HashSet ;
3334import java .util .List ;
35+ import java .util .Random ;
3436import java .util .Set ;
3537import java .util .stream .Collectors ;
3638
@@ -65,12 +67,21 @@ public StoryResponseDTO.StoryScenesResponseDTO getScenesOfStory(Long storyId) {
6567 }
6668
6769 @ Transactional
68- public void updateStoryTitle (Long storyId , String title ) {
70+ public void updateStoryTitleAndMainImage (Long storyId , String title ) {
6971 Story story = findMyStory (storyId );
70- story .updateTitle (title );
71- }
7272
73+ List <Scene > scenesWithImage = sceneRepository .findByStoryIdOrderByPageAsc (storyId )
74+ .stream ()
75+ .filter (s -> s .getImageUrl () != null && !s .getImageUrl ().isBlank ())
76+ .collect (Collectors .toList ());
77+
78+ if (!scenesWithImage .isEmpty ()) {
79+ Scene randomScene = scenesWithImage .get (new Random ().nextInt (scenesWithImage .size ()));
80+ story .updateImageUrl (randomScene .getImageUrl ());
81+ }
7382
83+ story .updateTitle (title );
84+ }
7485 @ Transactional
7586 public String updateSceneContent (Long storyId , int pageNum , String updatedContent ) {
7687 Scene scene = findMyScene (storyId , pageNum );
@@ -84,7 +95,6 @@ public String updateSceneContent(Long storyId, int pageNum, String updatedConten
8495 public void deleteStoryWithScenes (Long storyId ) {
8596 Story story = findMyStory (storyId );
8697 deleteS3AssetsOf (story );
87- // TODO: 여기에 EasterEggVoice S3 파일 삭제 로직 추가 필요
8898 storyRepository .delete (story );
8999 }
90100
@@ -103,18 +113,29 @@ private void deleteS3AssetsOf(Story story) {
103113 }
104114 }
105115
106- // 씬 이미지들 삭제
116+ // 씬 이미지 및 보이스파일 삭제
107117 List <Scene > scenes = sceneRepository .findByStoryIdOrderByPageAsc (story .getId ());
108118 Set <String > sceneImageUrls = new HashSet <>();
119+ Set <String > voiceFiles = new HashSet <>();
109120 for (Scene s : scenes ) {
110121 if (s .getImageUrl () != null && !s .getImageUrl ().isBlank ()) {
111122 sceneImageUrls .add (s .getImageUrl ());
112123 }
113-
124+ EasterEggVoice voice = s .getEasterEggVoice ();
125+ if (voice != null ) {
126+ String voiceFile = voice .getVoiceFile ();
127+ if (voiceFile != null && !voiceFile .isBlank ()) {
128+ voiceFiles .add (voiceFile );
129+ }
130+ }
114131 }
115132 for (String url : sceneImageUrls ) {
116133 s3Manager .deleteFileByS3Url (url );
117134 }
135+
136+ for ( String file : voiceFiles ){
137+ s3Manager .deleteFile (file );
138+ }
118139 }
119140
120141
0 commit comments