Skip to content

Commit 9d95190

Browse files
committed
refactor: orphanRemoval 을 최대한 활용하기 위해 CheerTags 에 set 로직 추가
1 parent 326dec0 commit 9d95190

File tree

3 files changed

+20
-14
lines changed

3 files changed

+20
-14
lines changed

src/main/java/eatda/domain/cheer/Cheer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public Cheer(Member member, Store store, String description, ImageKey imageKey)
5858
this.store = store;
5959
this.description = description;
6060
this.imageKey = imageKey;
61+
this.cheerTags = new CheerTags();
62+
6163
this.isAdmin = false;
6264
}
6365

@@ -73,7 +75,7 @@ private void validateDescription(String description) {
7375
}
7476

7577
public void setCheerTags(List<CheerTagName> cheerTagNames) {
76-
this.cheerTags = new CheerTags(this, cheerTagNames);
78+
this.cheerTags.setTags(this, cheerTagNames);
7779
}
7880

7981
public List<CheerTagName> getCheerTagNames() {

src/main/java/eatda/domain/cheer/CheerTags.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88
import java.util.ArrayList;
99
import java.util.List;
1010
import java.util.stream.Collectors;
11-
import lombok.AccessLevel;
12-
import lombok.NoArgsConstructor;
1311

1412
@Embeddable
15-
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1613
public class CheerTags {
1714

1815
private static final int MAX_CHEER_TAGS_PER_TYPE = 2;
1916

2017
@OneToMany(mappedBy = "cheer", cascade = CascadeType.ALL, orphanRemoval = true)
2118
private List<CheerTag> values = new ArrayList<>();
2219

23-
public CheerTags(Cheer cheer, List<CheerTagName> cheerTagsNames) {
24-
validate(cheerTagsNames);
25-
this.values = cheerTagsNames.stream()
26-
.map(name -> new CheerTag(cheer, name))
27-
.collect(Collectors.toList());
20+
public void setTags(Cheer cheer, List<CheerTagName> cheerTagNames) {
21+
validate(cheerTagNames);
22+
List<CheerTag> cheerTags = cheerTagNames.stream()
23+
.map(name -> new CheerTag(cheer, name)) // cheer is set later
24+
.toList();
25+
26+
this.values.clear();
27+
this.values.addAll(cheerTags);
2828
}
2929

3030
private void validate(List<CheerTagName> cheerTagNames) {

src/test/java/eatda/domain/cheer/CheerTagsTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,41 +35,45 @@ class CheerTagsTest {
3535
new ImageKey("imageKey"));
3636

3737
@Nested
38-
class Validate {
38+
class SetTags {
3939

4040
@Test
4141
void 각_카테고리별_태그는_최대_개수가_정해져있다() {
4242
List<CheerTagName> tagNames = List.of(
4343
CheerTagName.OLD_STORE_MOOD, CheerTagName.ENERGETIC,
4444
CheerTagName.GROUP_RESERVATION, CheerTagName.LARGE_PARKING);
45+
CheerTags cheerTags = new CheerTags();
4546

46-
assertThatCode(() -> new CheerTags(DEFAULT_CHEER, tagNames)).doesNotThrowAnyException();
47+
assertThatCode(() -> cheerTags.setTags(DEFAULT_CHEER, tagNames)).doesNotThrowAnyException();
4748
}
4849

4950
@Test
5051
void 태그_이름은_비어있을_수_있다() {
5152
List<CheerTagName> tagNames = Collections.emptyList();
53+
CheerTags cheerTags = new CheerTags();
5254

53-
assertThatCode(() -> new CheerTags(DEFAULT_CHEER, tagNames)).doesNotThrowAnyException();
55+
assertThatCode(() -> cheerTags.setTags(DEFAULT_CHEER, tagNames)).doesNotThrowAnyException();
5456
}
5557

5658
@Test
5759
void 카테고리별_태그는_최대_개수를_초과할_수_없다() {
5860
List<CheerTagName> tagNames = List.of(
5961
CheerTagName.OLD_STORE_MOOD, CheerTagName.ENERGETIC, CheerTagName.GOOD_FOR_DATING);
62+
CheerTags cheerTags = new CheerTags();
6063

6164
BusinessException exception = assertThrows(BusinessException.class,
62-
() -> new CheerTags(DEFAULT_CHEER, tagNames));
65+
() -> cheerTags.setTags(DEFAULT_CHEER, tagNames));
6366

6467
assertThat(exception.getErrorCode()).isEqualTo(BusinessErrorCode.EXCEED_CHEER_TAGS_PER_TYPE);
6568
}
6669

6770
@Test
6871
void 태그_이름은_중복될_수_없다() {
6972
List<CheerTagName> tagNames = List.of(CheerTagName.OLD_STORE_MOOD, CheerTagName.OLD_STORE_MOOD);
73+
CheerTags cheerTags = new CheerTags();
7074

7175
BusinessException exception = assertThrows(BusinessException.class,
72-
() -> new CheerTags(DEFAULT_CHEER, tagNames));
76+
() -> cheerTags.setTags(DEFAULT_CHEER, tagNames));
7377

7478
assertThat(exception.getErrorCode()).isEqualTo(BusinessErrorCode.CHEER_TAGS_DUPLICATED);
7579
}

0 commit comments

Comments
 (0)