Skip to content

Commit 1103d93

Browse files
committed
[refactor] 스토리 대표 이미지 설정 및 스토리 삭제 시 S3voiceFile 함께 삭제
1 parent 2a4e450 commit 1103d93

3 files changed

Lines changed: 34 additions & 7 deletions

File tree

src/main/java/everTale/everTale_be/domain/story/controller/StoryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public ApiResponse<String> updateStoryTitle(
4848
@Parameter(description = "스토리 ID") @PathVariable Long storyId,
4949
@Parameter(description = "스토리 제목") @RequestParam String title
5050
) {
51-
storyService.updateStoryTitle(storyId, title);
51+
storyService.updateStoryTitleAndMainImage(storyId, title);
5252
return ApiResponse.onSuccess(title);
5353
}
5454

src/main/java/everTale/everTale_be/domain/story/entity/Story.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ public void updateTitle(String title) {
5858
this.title = title;
5959
}
6060

61+
public void updateImageUrl(String imageUrl) {
62+
if (imageUrl != null && !imageUrl.isBlank()) {
63+
this.imageUrl = imageUrl;
64+
}
65+
}
66+
6167
public void addEasterEggLetter(EasterEggLetter letter) {
6268
this.easterEggLetter = letter;
6369
letter.updateStory(this);

src/main/java/everTale/everTale_be/domain/story/service/StoryService.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import everTale.everTale_be.domain.character.entity.enums.Gender;
66
import everTale.everTale_be.domain.character.repository.PersonalityRepository;
77
import everTale.everTale_be.domain.character.repository.StoryCharacterRepository;
8+
import everTale.everTale_be.domain.easterEgg.entity.EasterEggVoice;
89
import everTale.everTale_be.domain.profile.entity.Enum.ProfileType;
910
import everTale.everTale_be.domain.profile.entity.Profile;
1011
import everTale.everTale_be.domain.profile.repository.ProfileRepository;
@@ -31,6 +32,7 @@
3132

3233
import java.util.HashSet;
3334
import java.util.List;
35+
import java.util.Random;
3436
import java.util.Set;
3537
import 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

Comments
 (0)