Skip to content

Commit 3794ee3

Browse files
authored
Merge pull request #61 from DropThe8bit/feature/story
[refactor] Animal 전용 enum 추가, Personality 중복 오류 해결
2 parents 10b3dd4 + d8f2388 commit 3794ee3

5 files changed

Lines changed: 26 additions & 16 deletions

File tree

src/main/java/everTale/everTale_be/domain/character/entity/Personality.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package everTale.everTale_be.domain.character.entity;
22

3-
import jakarta.persistence.Entity;
4-
import jakarta.persistence.GeneratedValue;
5-
import jakarta.persistence.GenerationType;
6-
import jakarta.persistence.Id;
3+
import jakarta.persistence.*;
74
import lombok.*;
85

96
@Entity
@@ -16,6 +13,7 @@ public class Personality {
1613
@GeneratedValue(strategy = GenerationType.IDENTITY)
1714
private Long id;
1815

16+
@Column(unique = true, nullable = false)
1917
private String personality;
2018

2119
public static Personality from(String personality) {

src/main/java/everTale/everTale_be/domain/character/entity/StoryCharacter.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,14 @@ public void setStory(Story story) {
4343
}
4444

4545
public void addCharacterPersonality(Personality personality) {
46-
CharacterPersonality cp = CharacterPersonality.builder()
47-
.character(this)
48-
.personality(personality)
49-
.build();
50-
this.characterPersonalities.add(cp);
46+
boolean exists = this.characterPersonalities.stream()
47+
.anyMatch(cp -> cp.getPersonality().equals(personality));
48+
if (!exists) {
49+
CharacterPersonality cp = CharacterPersonality.builder()
50+
.character(this)
51+
.personality(personality)
52+
.build();
53+
this.characterPersonalities.add(cp);
54+
}
5155
}
52-
5356
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package everTale.everTale_be.domain.character.entity.enums;
22

33
public enum Gender {
4-
MALE,FEMALE;
4+
MALE,FEMALE,ANIMAL;
55
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
@Builder
1212
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1313
@AllArgsConstructor
14+
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"story_id", "page"}))
1415
public class Scene {
1516
@Id
1617
@GeneratedValue(strategy = GenerationType.IDENTITY)

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,10 @@ public String saveInitialCharacterInfo(Long storyId,
167167

168168
// Personality 리스트 저장
169169
for (String pDesc : request.getPersonalities()) {
170+
String normalized = pDesc.trim();
170171
Personality personality = personalityRepository
171-
.findByPersonality(pDesc)
172-
.orElseGet(() -> personalityRepository.save(Personality.from(pDesc)));
172+
.findByPersonality(normalized)
173+
.orElseGet(() -> personalityRepository.save(Personality.from(normalized)));
173174

174175
character.addCharacterPersonality(personality);
175176
}
@@ -240,8 +241,11 @@ public String generateNextScene(Long storyId, int pageNum) {
240241
String nextContent = storyApiClient.callFastApiForNextStory(dto);
241242

242243
// 5. 새 Scene 저장
243-
saveNewScene(story,pageNum,nextContent);
244-
244+
sceneRepository.findByStoryIdAndPage(story.getId(), pageNum)
245+
.ifPresentOrElse(
246+
scene -> scene.updateContent(nextContent),
247+
() -> saveNewScene(story, pageNum, nextContent)
248+
);
245249
return nextContent;
246250
}
247251

@@ -265,8 +269,12 @@ public String generateNextSceneWithAnswer(Long storyId, int pageNum, StoryReques
265269

266270
var dto = buildNextStoryDto(prevScene, story, character, pageNum);
267271
String nextContent = storyApiClient.callFastApiForNextStoryWithAnswer(dto, request.getQuestion(), request.getAnswer());
268-
saveNewScene(story, pageNum, nextContent);
269272

273+
sceneRepository.findByStoryIdAndPage(story.getId(), pageNum)
274+
.ifPresentOrElse(
275+
scene -> scene.updateContent(nextContent),
276+
() -> saveNewScene(story, pageNum, nextContent)
277+
);
270278
return nextContent;
271279
}
272280

0 commit comments

Comments
 (0)