From 9b7091ee56848f6f07fd8e2bdc57f4af6768028b Mon Sep 17 00:00:00 2001 From: leegwichan Date: Thu, 17 Jul 2025 17:38:29 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20Entity=20<->=20Domain=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/customize/BellEntity.java | 15 +++++++++++ .../customize/CustomizeTimeBoxEntity.java | 26 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/debatetimer/entity/customize/BellEntity.java b/src/main/java/com/debatetimer/entity/customize/BellEntity.java index fefc80ab..9c1f9982 100644 --- a/src/main/java/com/debatetimer/entity/customize/BellEntity.java +++ b/src/main/java/com/debatetimer/entity/customize/BellEntity.java @@ -1,5 +1,6 @@ package com.debatetimer.entity.customize; +import com.debatetimer.domain.customize.Bell; import com.debatetimer.exception.custom.DTClientErrorException; import com.debatetimer.exception.errorcode.ClientErrorCode; import jakarta.persistence.Column; @@ -46,6 +47,12 @@ public BellEntity(CustomizeTimeBoxEntity customizeTimeBox, int time, int count) this.count = count; } + public BellEntity(CustomizeTimeBoxEntity customizeTimeBox, Bell bell) { + this.customizeTimeBox = customizeTimeBox; + this.time = bell.getTime(); + this.count = bell.getCount(); + } + private void validateTime(int time) { if (time < 0) { throw new DTClientErrorException(ClientErrorCode.INVALID_BELL_TIME); @@ -57,4 +64,12 @@ private void validateCount(int count) { throw new DTClientErrorException(ClientErrorCode.INVALID_BELL_COUNT); } } + + public Bell toDomain() { + return new Bell(time, count); + } + + public boolean isContained(CustomizeTimeBoxEntity timeBox) { + return this.customizeTimeBox.getId().equals(timeBox.getId()); + } } diff --git a/src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java b/src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java index 04fe115e..9480b05e 100644 --- a/src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java +++ b/src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntity.java @@ -1,7 +1,11 @@ package com.debatetimer.entity.customize; +import com.debatetimer.domain.customize.Bell; import com.debatetimer.domain.customize.CustomizeBoxType; +import com.debatetimer.domain.customize.CustomizeTimeBox; +import com.debatetimer.domain.customize.NormalTimeBox; import com.debatetimer.domain.customize.Stance; +import com.debatetimer.domain.customize.TimeBasedTimeBox; import com.debatetimer.exception.custom.DTClientErrorException; import com.debatetimer.exception.errorcode.ClientErrorCode; import jakarta.persistence.Entity; @@ -16,6 +20,7 @@ import jakarta.persistence.Table; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.List; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -45,7 +50,7 @@ public class CustomizeTimeBoxEntity { @Enumerated(EnumType.STRING) private Stance stance; - private int time; + private Integer time; private String speaker; @NotBlank @@ -110,6 +115,18 @@ public CustomizeTimeBoxEntity( this.timePerSpeaking = timePerSpeaking; } + public CustomizeTimeBoxEntity(CustomizeTableEntity customizeTable, CustomizeTimeBox timeBox, int sequence) { + this.customizeTable = customizeTable; + this.sequence = sequence; + this.stance = timeBox.getStance(); + this.time = timeBox.getTime(); + this.speaker = timeBox.getSpeaker(); + this.speechType = timeBox.getSpeechType(); + this.boxType = timeBox.getBoxType(); + this.timePerTeam = timeBox.getTimePerTeam(); + this.timePerSpeaking = timeBox.getTimePerSpeaking(); + } + private static int convertToTime(Integer timePerTeam) { if (timePerTeam == null) { throw new DTClientErrorException(ClientErrorCode.INVALID_TIME_BOX_FORMAT); @@ -178,4 +195,11 @@ private void validateSpeechType(String speechType) { throw new DTClientErrorException(ClientErrorCode.INVALID_TIME_BOX_SPEECH_TYPE_LENGTH); } } + + public CustomizeTimeBox toDomain(List bells) { + if (boxType.isTimeBased()) { + return new TimeBasedTimeBox(stance, speechType, speaker, timePerTeam, timePerSpeaking); + } + return new NormalTimeBox(stance, speechType, speaker, time, bells); + } } From 4bdacb0029e07dfb3c8a514e17ab6f8ff6b8183e Mon Sep 17 00:00:00 2001 From: leegwichan Date: Thu, 17 Jul 2025 17:41:18 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat(CustomizeTimeBoxEntities):=20Alarm=20E?= =?UTF-8?q?ntity=20=EA=B9=8C=EC=A7=80=20=EA=B0=99=EC=9D=B4=20=EB=8B=A4?= =?UTF-8?q?=EB=A3=A8=EB=A1=9C=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../customize/CustomizeTimeBoxEntities.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java b/src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java index 442845ac..3ec3038a 100644 --- a/src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java +++ b/src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java @@ -1,21 +1,46 @@ package com.debatetimer.domain.customize; +import com.debatetimer.entity.customize.BellEntity; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; +import java.util.Collections; import java.util.Comparator; import java.util.List; import lombok.Getter; -@Getter public class CustomizeTimeBoxEntities { private static final Comparator TIME_BOX_COMPARATOR = Comparator .comparing(CustomizeTimeBoxEntity::getSequence); + @Getter private final List timeBoxes; + private final List bells; + public CustomizeTimeBoxEntities(List timeBoxes) { this.timeBoxes = timeBoxes.stream() .sorted(TIME_BOX_COMPARATOR) .toList(); + this.bells = Collections.emptyList(); + } + + public CustomizeTimeBoxEntities(List timeBoxes, List bells) { + this.timeBoxes = timeBoxes.stream() + .sorted(TIME_BOX_COMPARATOR) + .toList(); + this.bells = bells; + } + + public List toDomain() { + return timeBoxes.stream() + .map(timebox -> timebox.toDomain(getBells(timebox))) + .toList(); + } + + private List getBells(CustomizeTimeBoxEntity timeBox) { + return bells.stream() + .filter(bell -> bell.isContained(timeBox)) + .map(BellEntity::toDomain) + .toList(); } } From 63d28cfac5ad95ca53963fe498c2223ce985dfff Mon Sep 17 00:00:00 2001 From: leegwichan Date: Thu, 17 Jul 2025 17:41:50 +0900 Subject: [PATCH 3/6] =?UTF-8?q?refactor(CustomizeServiceV2)=20:=20?= =?UTF-8?q?=EC=A0=84=EB=B0=98=EC=A0=81=EC=9D=B8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/customize/BellRepository.java | 8 +- .../customize/CustomizeTimeBoxRepository.java | 4 +- .../service/customize/CustomizeService.java | 4 +- .../service/customize/CustomizeServiceV2.java | 106 ++++++------------ .../repository/BaseRepositoryTest.java | 7 +- .../customize/BellRepositoryTest.java | 47 ++++++++ .../CustomizeTimeBoxRepositoryTest.java | 6 +- .../customize/CustomizeServiceV2Test.java | 2 +- 8 files changed, 100 insertions(+), 84 deletions(-) create mode 100644 src/test/java/com/debatetimer/repository/customize/BellRepositoryTest.java diff --git a/src/main/java/com/debatetimer/repository/customize/BellRepository.java b/src/main/java/com/debatetimer/repository/customize/BellRepository.java index 8dd571d6..8653266b 100644 --- a/src/main/java/com/debatetimer/repository/customize/BellRepository.java +++ b/src/main/java/com/debatetimer/repository/customize/BellRepository.java @@ -3,15 +3,17 @@ import com.debatetimer.entity.customize.BellEntity; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; import java.util.List; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.Repository; public interface BellRepository extends Repository { BellEntity save(BellEntity bell); - List findByCustomizeTimeBox(CustomizeTimeBoxEntity customizeTimeBox); - - void deleteAllByCustomizeTimeBoxIn(List customizeTimeBoxes); + @Query("DELETE FROM BellEntity b WHERE b.customizeTimeBox.customizeTable.id = :tableId") + @Modifying(clearAutomatically = true, flushAutomatically = true) + void deleteAllByTable(long tableId); List findAllByCustomizeTimeBoxIn(List timeBoxes); } diff --git a/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java b/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java index 298ea6c4..09154f82 100644 --- a/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java +++ b/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java @@ -27,7 +27,7 @@ default CustomizeTimeBoxEntities findTableTimeBoxes(CustomizeTableEntity table) return new CustomizeTimeBoxEntities(timeBoxes); } - @Query("DELETE FROM CustomizeTimeBoxEntity ctb WHERE ctb.customizeTable = :table") + @Query("DELETE FROM CustomizeTimeBoxEntity ctb WHERE ctb.customizeTable.id = :tableId") @Modifying(clearAutomatically = true, flushAutomatically = true) - void deleteAllByTable(CustomizeTableEntity table); + void deleteAllByTable(long tableId); } diff --git a/src/main/java/com/debatetimer/service/customize/CustomizeService.java b/src/main/java/com/debatetimer/service/customize/CustomizeService.java index cc9e7fee..b339d942 100644 --- a/src/main/java/com/debatetimer/service/customize/CustomizeService.java +++ b/src/main/java/com/debatetimer/service/customize/CustomizeService.java @@ -47,7 +47,7 @@ public CustomizeTableResponse updateTable( CustomizeTable renewedTable = tableCreateRequest.toTable(member); existingTable.updateTable(renewedTable); - timeBoxRepository.deleteAllByTable(existingTable); + timeBoxRepository.deleteAllByTable(existingTable.getId()); CustomizeTimeBoxEntities savedCustomizeTimeBoxes = saveTimeBoxes(tableCreateRequest, existingTable.toDomain()); return new CustomizeTableResponse(existingTable.toDomain(), savedCustomizeTimeBoxes); } @@ -64,7 +64,7 @@ public CustomizeTableResponse updateUsedAt(long tableId, Member member) { @Transactional public void deleteTable(long tableId, Member member) { CustomizeTableEntity table = tableRepository.getByIdAndMember(tableId, member); - timeBoxRepository.deleteAllByTable(table); + timeBoxRepository.deleteAllByTable(table.getId()); tableRepository.delete(table); } diff --git a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java index f4e6cf48..955475f2 100644 --- a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java +++ b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java @@ -1,14 +1,11 @@ package com.debatetimer.service.customize; import com.debatetimer.domain.customize.CustomizeTable; +import com.debatetimer.domain.customize.CustomizeTimeBox; import com.debatetimer.domain.customize.CustomizeTimeBoxEntities; import com.debatetimer.domain.member.Member; -import com.debatetimer.dto.customize.request.BellRequest; import com.debatetimer.dto.customize.request.CustomizeTableCreateRequest; -import com.debatetimer.dto.customize.request.CustomizeTimeBoxCreateRequest; -import com.debatetimer.dto.customize.response.BellResponse; import com.debatetimer.dto.customize.response.CustomizeTableResponse; -import com.debatetimer.dto.customize.response.CustomizeTimeBoxResponse; import com.debatetimer.entity.customize.BellEntity; import com.debatetimer.entity.customize.CustomizeTableEntity; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; @@ -32,20 +29,21 @@ public class CustomizeServiceV2 { @Transactional public CustomizeTableResponse save(CustomizeTableCreateRequest tableCreateRequest, Member member) { CustomizeTable table = tableCreateRequest.toTable(member); - CustomizeTableEntity savedTable = tableRepository.save(new CustomizeTableEntity(table)); + List timeBoxes = tableCreateRequest.toTimeBoxList(); - return saveTimeBoxesAndBells(tableCreateRequest, savedTable.toDomain()); + CustomizeTableEntity savedTableEntity = tableRepository.save(new CustomizeTableEntity(table)); + saveTimeBoxes(savedTableEntity, timeBoxes); + return CustomizeTableResponse.ofDomain(savedTableEntity.toDomain(), timeBoxes); } @Transactional(readOnly = true) public CustomizeTableResponse findTable(long tableId, Member member) { CustomizeTableEntity tableEntity = tableRepository.getByIdAndMember(tableId, member); - CustomizeTimeBoxEntities timeBoxes = timeBoxRepository.findTableTimeBoxes(tableEntity); - List timeBoxResponses = timeBoxes.getTimeBoxes() - .stream() - .map(this::getTimeBoxResponse) - .toList(); - return new CustomizeTableResponse(tableEntity.toDomain(), timeBoxResponses); + List timeBoxEntityList = timeBoxRepository.findAllByCustomizeTable(tableEntity); + List bellEntityList = bellRepository.findAllByCustomizeTimeBoxIn(timeBoxEntityList); + CustomizeTimeBoxEntities timeBoxEntities = new CustomizeTimeBoxEntities(timeBoxEntityList, bellEntityList); + + return CustomizeTableResponse.ofDomain(tableEntity.toDomain(), timeBoxEntities.toDomain()); } @Transactional @@ -54,83 +52,47 @@ public CustomizeTableResponse updateTable( long tableId, Member member ) { - CustomizeTableEntity existingTable = tableRepository.getByIdAndMember(tableId, member); - CustomizeTable renewedTable = tableCreateRequest.toTable(member); - existingTable.updateTable(renewedTable); + CustomizeTableEntity tableEntity = tableRepository.getByIdAndMember(tableId, member); + bellRepository.deleteAllByTable(tableEntity.getId()); + timeBoxRepository.deleteAllByTable(tableEntity.getId()); - deleteBell(timeBoxRepository.findTableTimeBoxes(existingTable)); - timeBoxRepository.deleteAllByTable(existingTable); - return saveTimeBoxesAndBells(tableCreateRequest, existingTable.toDomain()); + tableEntity.updateTable(tableCreateRequest.toTable(member)); + List timeBoxes = tableCreateRequest.toTimeBoxList(); + saveTimeBoxes(tableEntity, timeBoxes); + return CustomizeTableResponse.ofDomain(tableEntity.toDomain(), timeBoxes); } @Transactional public CustomizeTableResponse updateUsedAt(long tableId, Member member) { CustomizeTableEntity tableEntity = tableRepository.getByIdAndMember(tableId, member); - CustomizeTimeBoxEntities timeBoxes = timeBoxRepository.findTableTimeBoxes(tableEntity); + List timeBoxEntityList = timeBoxRepository.findAllByCustomizeTable(tableEntity); + List bellEntityList = bellRepository.findAllByCustomizeTimeBoxIn(timeBoxEntityList); + CustomizeTimeBoxEntities timeBoxEntities = new CustomizeTimeBoxEntities(timeBoxEntityList, bellEntityList); + tableEntity.updateUsedAt(); - List timeBoxResponses = timeBoxes.getTimeBoxes() - .stream() - .map(this::getTimeBoxResponse) - .toList(); - return new CustomizeTableResponse(tableEntity.toDomain(), timeBoxResponses); + CustomizeTable table = tableEntity.toDomain(); + List timeBoxes = timeBoxEntities.toDomain(); + return CustomizeTableResponse.ofDomain(table, timeBoxes); } @Transactional public void deleteTable(long tableId, Member member) { CustomizeTableEntity table = tableRepository.getByIdAndMember(tableId, member); - deleteBell(timeBoxRepository.findTableTimeBoxes(table)); - timeBoxRepository.deleteAllByTable(table); + bellRepository.deleteAllByTable(table.getId()); + timeBoxRepository.deleteAllByTable(table.getId()); tableRepository.delete(table); } - private CustomizeTableResponse saveTimeBoxesAndBells( - CustomizeTableCreateRequest tableCreateRequest, - CustomizeTable table - ) { - List timeBoxCreateRequests = tableCreateRequest.table(); - List timeBoxResponses = IntStream.range(0, timeBoxCreateRequests.size()) - .mapToObj(i -> createTimeBoxResponse(timeBoxCreateRequests.get(i), table, i + 1)) - .toList(); - return new CustomizeTableResponse(table, timeBoxResponses); - } - - private CustomizeTimeBoxResponse createTimeBoxResponse( - CustomizeTimeBoxCreateRequest request, - CustomizeTable table, - int sequence - ) { - CustomizeTimeBoxEntity savedTimeBox = timeBoxRepository.save(request.toTimeBox(table, sequence)); - return createTimeBoxResponse(request.bell(), savedTimeBox); - } - - private CustomizeTimeBoxResponse createTimeBoxResponse(List bellRequests, CustomizeTimeBoxEntity timeBox) { - if (timeBox.getBoxType().isTimeBased()) { - return new CustomizeTimeBoxResponse(timeBox, null); - } - - List bellResponses = bellRequests - .stream() - .map(bellRequest -> new BellEntity(timeBox, bellRequest.time(), bellRequest.count())) - .map(bellRepository::save) - .map(bell -> new BellResponse(bell.getTime(), bell.getCount())) - .toList(); - return new CustomizeTimeBoxResponse(timeBox, bellResponses); - } - - private CustomizeTimeBoxResponse getTimeBoxResponse(CustomizeTimeBoxEntity timeBox) { - if (timeBox.getBoxType().isTimeBased()) { - return new CustomizeTimeBoxResponse(timeBox, null); - } - - List bellResponses = bellRepository.findByCustomizeTimeBox(timeBox) - .stream() - .map(bell -> new BellResponse(bell.getTime(), bell.getCount())) - .toList(); - return new CustomizeTimeBoxResponse(timeBox, bellResponses); + private void saveTimeBoxes(CustomizeTableEntity tableEntity, List timeBoxes) { + IntStream.range(0, timeBoxes.size()) + .forEach(i -> saveTimeBox(tableEntity, timeBoxes.get(i), i + 1)); } - private void deleteBell(CustomizeTimeBoxEntities savedCustomizeTimeBoxes) { - bellRepository.deleteAllByCustomizeTimeBoxIn(savedCustomizeTimeBoxes.getTimeBoxes()); + private void saveTimeBox(CustomizeTableEntity tableEntity, CustomizeTimeBox timeBox, int sequence) { + CustomizeTimeBoxEntity timeBoxEntity = timeBoxRepository.save( + new CustomizeTimeBoxEntity(tableEntity, timeBox, sequence)); + timeBox.getBells() + .forEach(bell -> bellRepository.save(new BellEntity(timeBoxEntity, bell))); } } diff --git a/src/test/java/com/debatetimer/repository/BaseRepositoryTest.java b/src/test/java/com/debatetimer/repository/BaseRepositoryTest.java index 338f7430..2b7d1c04 100644 --- a/src/test/java/com/debatetimer/repository/BaseRepositoryTest.java +++ b/src/test/java/com/debatetimer/repository/BaseRepositoryTest.java @@ -1,6 +1,7 @@ package com.debatetimer.repository; import com.debatetimer.config.JpaAuditingConfig; +import com.debatetimer.fixture.BellGenerator; import com.debatetimer.fixture.CustomizeTableGenerator; import com.debatetimer.fixture.CustomizeTimeBoxGenerator; import com.debatetimer.fixture.MemberGenerator; @@ -12,7 +13,8 @@ JpaAuditingConfig.class, MemberGenerator.class, CustomizeTableGenerator.class, - CustomizeTimeBoxGenerator.class + CustomizeTimeBoxGenerator.class, + BellGenerator.class }) @DataJpaTest public abstract class BaseRepositoryTest { @@ -25,4 +27,7 @@ public abstract class BaseRepositoryTest { @Autowired protected CustomizeTimeBoxGenerator customizeTimeBoxGenerator; + + @Autowired + protected BellGenerator bellGenerator; } diff --git a/src/test/java/com/debatetimer/repository/customize/BellRepositoryTest.java b/src/test/java/com/debatetimer/repository/customize/BellRepositoryTest.java new file mode 100644 index 00000000..6dbb6919 --- /dev/null +++ b/src/test/java/com/debatetimer/repository/customize/BellRepositoryTest.java @@ -0,0 +1,47 @@ +package com.debatetimer.repository.customize; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +import com.debatetimer.domain.customize.CustomizeBoxType; +import com.debatetimer.domain.member.Member; +import com.debatetimer.entity.customize.CustomizeTableEntity; +import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; +import com.debatetimer.repository.BaseRepositoryTest; +import java.util.List; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class BellRepositoryTest extends BaseRepositoryTest { + + @Autowired + private BellRepository bellRepository; + + @Nested + class DeleteAllByTable { + + @Test + void 특정_테이블에_해당하는_벨을_삭제한다() { + Member member = memberGenerator.generate("chan@gmail.com"); + CustomizeTableEntity deleteBellTable = customizeTableGenerator.generate(member); + CustomizeTableEntity otherTable = customizeTableGenerator.generate(member); + CustomizeTimeBoxEntity deleteBellTimeBox = customizeTimeBoxGenerator.generate(deleteBellTable, + CustomizeBoxType.NORMAL, 1); + CustomizeTimeBoxEntity otherTimeBox = customizeTimeBoxGenerator.generate(otherTable, + CustomizeBoxType.NORMAL, 1); + bellGenerator.generate(deleteBellTimeBox, 45, 1); + bellGenerator.generate(deleteBellTimeBox, 60, 1); + bellGenerator.generate(otherTimeBox, 45, 1); + + bellRepository.deleteAllByTable(deleteBellTable.getId()); + + assertAll( + () -> assertThat(bellRepository.findAllByCustomizeTimeBoxIn(List.of(deleteBellTimeBox))).isEmpty(), + () -> assertThat(bellRepository.findAllByCustomizeTimeBoxIn(List.of(otherTimeBox))).hasSize(1) + ); + + } + } + +} diff --git a/src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java b/src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java index c0d42904..eb94339f 100644 --- a/src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java +++ b/src/test/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepositoryTest.java @@ -48,7 +48,7 @@ class DeleteAllByTable { customizeTimeBoxGenerator.generate(chanTable, CustomizeBoxType.NORMAL, 1); customizeTimeBoxGenerator.generate(chanTable, CustomizeBoxType.NORMAL, 2); - customizeTimeBoxRepository.deleteAllByTable(chanTable); + customizeTimeBoxRepository.deleteAllByTable(chanTable.getId()); List timeBoxes = customizeTimeBoxRepository.findAllByCustomizeTable(chanTable); assertThat(timeBoxes).isEmpty(); @@ -63,7 +63,7 @@ class DeleteAllByTable { CustomizeTableEntity deletedTable = customizeTableGenerator.generate(chan); customizeTimeBoxGenerator.generate(deletedTable, CustomizeBoxType.NORMAL, 1); - customizeTimeBoxRepository.deleteAllByTable(deletedTable); + customizeTimeBoxRepository.deleteAllByTable(deletedTable.getId()); List timeBoxes = customizeTimeBoxRepository.findAllByCustomizeTable(filledTable); assertThat(timeBoxes).hasSize(2); @@ -74,7 +74,7 @@ class DeleteAllByTable { Member chan = memberGenerator.generate("default@gmail.com"); CustomizeTableEntity emptyTable = customizeTableGenerator.generate(chan); - assertThatCode(() -> customizeTimeBoxRepository.deleteAllByTable(emptyTable)) + assertThatCode(() -> customizeTimeBoxRepository.deleteAllByTable(emptyTable.getId())) .doesNotThrowAnyException(); } } diff --git a/src/test/java/com/debatetimer/service/customize/CustomizeServiceV2Test.java b/src/test/java/com/debatetimer/service/customize/CustomizeServiceV2Test.java index 252be593..1e0b58b7 100644 --- a/src/test/java/com/debatetimer/service/customize/CustomizeServiceV2Test.java +++ b/src/test/java/com/debatetimer/service/customize/CustomizeServiceV2Test.java @@ -80,7 +80,7 @@ class FindTable { () -> assertThat(foundResponse.id()).isEqualTo(chanTable.getId()), () -> assertThat(foundResponse.table()).hasSize(2), () -> assertThat(foundResponse.table().get(0).bell()).hasSize(2), - () -> assertThat(foundResponse.table().get(1).bell()).hasSize(0) + () -> assertThat(foundResponse.table().get(1).bell()).isNull() ); } From 41d9672e1bd065feb4449b99e833887e1656efc6 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Thu, 17 Jul 2025 17:44:12 +0900 Subject: [PATCH 4/6] =?UTF-8?q?refactor(CustomizeTimeBoxEntities)=20:=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - domain.customize -> entity.customize 패키지로 변경 --- .../dto/customize/request/CustomizeTableCreateRequest.java | 2 +- .../dto/customize/response/CustomizeTableResponse.java | 2 +- .../customize/CustomizeTimeBoxEntities.java | 6 +++--- .../repository/customize/CustomizeTimeBoxRepository.java | 2 +- .../debatetimer/service/customize/CustomizeService.java | 2 +- .../debatetimer/service/customize/CustomizeServiceV2.java | 2 +- .../customize/CustomizeTimeBoxEntitiesTest.java | 7 ++++--- 7 files changed, 12 insertions(+), 11 deletions(-) rename src/main/java/com/debatetimer/{domain => entity}/customize/CustomizeTimeBoxEntities.java (89%) rename src/test/java/com/debatetimer/{domain => entity}/customize/CustomizeTimeBoxEntitiesTest.java (87%) diff --git a/src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java b/src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java index f4f9baf1..8dc05809 100644 --- a/src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java +++ b/src/main/java/com/debatetimer/dto/customize/request/CustomizeTableCreateRequest.java @@ -2,7 +2,7 @@ import com.debatetimer.domain.customize.CustomizeTable; import com.debatetimer.domain.customize.CustomizeTimeBox; -import com.debatetimer.domain.customize.CustomizeTimeBoxEntities; +import com.debatetimer.entity.customize.CustomizeTimeBoxEntities; import com.debatetimer.domain.member.Member; import jakarta.validation.Valid; import java.util.List; diff --git a/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java b/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java index 906bc27e..edcfab20 100644 --- a/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java +++ b/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java @@ -2,7 +2,7 @@ import com.debatetimer.domain.customize.CustomizeTable; import com.debatetimer.domain.customize.CustomizeTimeBox; -import com.debatetimer.domain.customize.CustomizeTimeBoxEntities; +import com.debatetimer.entity.customize.CustomizeTimeBoxEntities; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; import java.util.List; diff --git a/src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java b/src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntities.java similarity index 89% rename from src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java rename to src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntities.java index 3ec3038a..32f5c383 100644 --- a/src/main/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntities.java +++ b/src/main/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntities.java @@ -1,7 +1,7 @@ -package com.debatetimer.domain.customize; +package com.debatetimer.entity.customize; -import com.debatetimer.entity.customize.BellEntity; -import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; +import com.debatetimer.domain.customize.Bell; +import com.debatetimer.domain.customize.CustomizeTimeBox; import java.util.Collections; import java.util.Comparator; import java.util.List; diff --git a/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java b/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java index 09154f82..680391f6 100644 --- a/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java +++ b/src/main/java/com/debatetimer/repository/customize/CustomizeTimeBoxRepository.java @@ -1,7 +1,7 @@ package com.debatetimer.repository.customize; -import com.debatetimer.domain.customize.CustomizeTimeBoxEntities; import com.debatetimer.entity.customize.CustomizeTableEntity; +import com.debatetimer.entity.customize.CustomizeTimeBoxEntities; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; import java.util.List; import org.springframework.data.jpa.repository.Modifying; diff --git a/src/main/java/com/debatetimer/service/customize/CustomizeService.java b/src/main/java/com/debatetimer/service/customize/CustomizeService.java index b339d942..13b3e44d 100644 --- a/src/main/java/com/debatetimer/service/customize/CustomizeService.java +++ b/src/main/java/com/debatetimer/service/customize/CustomizeService.java @@ -1,11 +1,11 @@ package com.debatetimer.service.customize; import com.debatetimer.domain.customize.CustomizeTable; -import com.debatetimer.domain.customize.CustomizeTimeBoxEntities; import com.debatetimer.domain.member.Member; import com.debatetimer.dto.customize.request.CustomizeTableCreateRequest; import com.debatetimer.dto.customize.response.CustomizeTableResponse; import com.debatetimer.entity.customize.CustomizeTableEntity; +import com.debatetimer.entity.customize.CustomizeTimeBoxEntities; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; import com.debatetimer.repository.customize.CustomizeTableRepository; import com.debatetimer.repository.customize.CustomizeTimeBoxRepository; diff --git a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java index 955475f2..342041dd 100644 --- a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java +++ b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java @@ -2,12 +2,12 @@ import com.debatetimer.domain.customize.CustomizeTable; import com.debatetimer.domain.customize.CustomizeTimeBox; -import com.debatetimer.domain.customize.CustomizeTimeBoxEntities; import com.debatetimer.domain.member.Member; import com.debatetimer.dto.customize.request.CustomizeTableCreateRequest; import com.debatetimer.dto.customize.response.CustomizeTableResponse; import com.debatetimer.entity.customize.BellEntity; import com.debatetimer.entity.customize.CustomizeTableEntity; +import com.debatetimer.entity.customize.CustomizeTimeBoxEntities; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; import com.debatetimer.repository.customize.BellRepository; import com.debatetimer.repository.customize.CustomizeTableRepository; diff --git a/src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntitiesTest.java b/src/test/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntitiesTest.java similarity index 87% rename from src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntitiesTest.java rename to src/test/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntitiesTest.java index 6db5cee9..48d0fb16 100644 --- a/src/test/java/com/debatetimer/domain/customize/CustomizeTimeBoxEntitiesTest.java +++ b/src/test/java/com/debatetimer/entity/customize/CustomizeTimeBoxEntitiesTest.java @@ -1,10 +1,11 @@ -package com.debatetimer.domain.customize; +package com.debatetimer.entity.customize; import static org.assertj.core.api.Assertions.assertThat; +import com.debatetimer.domain.customize.CustomizeBoxType; +import com.debatetimer.domain.customize.CustomizeTable; +import com.debatetimer.domain.customize.Stance; import com.debatetimer.domain.member.Member; -import com.debatetimer.entity.customize.CustomizeTableEntity; -import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; From 1b35e5f813a81e4d66757c428f5ffcd28da9f81a Mon Sep 17 00:00:00 2001 From: leegwichan Date: Thu, 17 Jul 2025 18:01:28 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix(CustomizeServiceV2)=20:=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - deleteAll() 요청 시, 영속성 컨텍스트가 플러시 된다는 것을 고려하여 순서 수정 --- .../com/debatetimer/service/customize/CustomizeServiceV2.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java index 342041dd..347d0a21 100644 --- a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java +++ b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java @@ -53,10 +53,10 @@ public CustomizeTableResponse updateTable( Member member ) { CustomizeTableEntity tableEntity = tableRepository.getByIdAndMember(tableId, member); + tableEntity.updateTable(tableCreateRequest.toTable(member)); + bellRepository.deleteAllByTable(tableEntity.getId()); timeBoxRepository.deleteAllByTable(tableEntity.getId()); - - tableEntity.updateTable(tableCreateRequest.toTable(member)); List timeBoxes = tableCreateRequest.toTimeBoxList(); saveTimeBoxes(tableEntity, timeBoxes); return CustomizeTableResponse.ofDomain(tableEntity.toDomain(), timeBoxes); From 6917a44dec014d128961c72da4e5e4f441599902 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Fri, 18 Jul 2025 10:12:06 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor=20:=20DTO=EC=9D=98=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용하지 않는 생성자 제거 - 정팩매 -> 생성자로 변경 --- .../response/CustomizeTableResponse.java | 17 ++++------------- .../response/CustomizeTimeBoxResponse.java | 14 -------------- .../service/customize/CustomizeServiceV2.java | 8 ++++---- 3 files changed, 8 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java b/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java index edcfab20..2309b490 100644 --- a/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java +++ b/src/main/java/com/debatetimer/dto/customize/response/CustomizeTableResponse.java @@ -16,13 +16,6 @@ public CustomizeTableResponse( toTimeBoxResponses(customizeTimeBoxes)); } - public CustomizeTableResponse( - CustomizeTable customizeTable, - List timeBoxResponses - ) { - this(customizeTable.getId(), new CustomizeTableInfoResponse(customizeTable), timeBoxResponses); - } - private static List toTimeBoxResponses(CustomizeTimeBoxEntities timeBoxes) { List customizeTimeBoxes = timeBoxes.getTimeBoxes(); return customizeTimeBoxes @@ -31,13 +24,11 @@ private static List toTimeBoxResponses(CustomizeTimeBo .toList(); } - public static CustomizeTableResponse ofDomain(CustomizeTable customizeTable, - List customizeTimeBoxes) { // TODO 정팩매 -> 생성자로 전환 - return new CustomizeTableResponse( - customizeTable.getId(), + public CustomizeTableResponse(CustomizeTable customizeTable, + List customizeTimeBoxes) { + this(customizeTable.getId(), new CustomizeTableInfoResponse(customizeTable), - toTimeBoxResponses(customizeTimeBoxes) - ); + toTimeBoxResponses(customizeTimeBoxes)); } private static List toTimeBoxResponses(List customizeTimeBoxes) { diff --git a/src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java b/src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java index ce90f96a..5bb6bb7a 100644 --- a/src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java +++ b/src/main/java/com/debatetimer/dto/customize/response/CustomizeTimeBoxResponse.java @@ -5,7 +5,6 @@ import com.debatetimer.domain.customize.CustomizeTimeBox; import com.debatetimer.domain.customize.Stance; import com.debatetimer.entity.customize.CustomizeTimeBoxEntity; -import java.util.Collections; import java.util.List; public record CustomizeTimeBoxResponse( @@ -32,19 +31,6 @@ public CustomizeTimeBoxResponse(CustomizeTimeBoxEntity customizeTimeBox) { ); } - public CustomizeTimeBoxResponse(CustomizeTimeBoxEntity customizeTimeBox, List bell) { - this( - customizeTimeBox.getStance(), - customizeTimeBox.getSpeechType(), - customizeTimeBox.getBoxType(), - convertTime(customizeTimeBox), - bell, - customizeTimeBox.getTimePerTeam(), - customizeTimeBox.getTimePerSpeaking(), - customizeTimeBox.getSpeaker() - ); - } - private static Integer convertTime(CustomizeTimeBoxEntity customizeTimeBox) { if (customizeTimeBox.getBoxType() == CustomizeBoxType.TIME_BASED) { return null; diff --git a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java index 347d0a21..392f8c89 100644 --- a/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java +++ b/src/main/java/com/debatetimer/service/customize/CustomizeServiceV2.java @@ -33,7 +33,7 @@ public CustomizeTableResponse save(CustomizeTableCreateRequest tableCreateReques CustomizeTableEntity savedTableEntity = tableRepository.save(new CustomizeTableEntity(table)); saveTimeBoxes(savedTableEntity, timeBoxes); - return CustomizeTableResponse.ofDomain(savedTableEntity.toDomain(), timeBoxes); + return new CustomizeTableResponse(savedTableEntity.toDomain(), timeBoxes); } @Transactional(readOnly = true) @@ -43,7 +43,7 @@ public CustomizeTableResponse findTable(long tableId, Member member) { List bellEntityList = bellRepository.findAllByCustomizeTimeBoxIn(timeBoxEntityList); CustomizeTimeBoxEntities timeBoxEntities = new CustomizeTimeBoxEntities(timeBoxEntityList, bellEntityList); - return CustomizeTableResponse.ofDomain(tableEntity.toDomain(), timeBoxEntities.toDomain()); + return new CustomizeTableResponse(tableEntity.toDomain(), timeBoxEntities.toDomain()); } @Transactional @@ -59,7 +59,7 @@ public CustomizeTableResponse updateTable( timeBoxRepository.deleteAllByTable(tableEntity.getId()); List timeBoxes = tableCreateRequest.toTimeBoxList(); saveTimeBoxes(tableEntity, timeBoxes); - return CustomizeTableResponse.ofDomain(tableEntity.toDomain(), timeBoxes); + return new CustomizeTableResponse(tableEntity.toDomain(), timeBoxes); } @Transactional @@ -72,7 +72,7 @@ public CustomizeTableResponse updateUsedAt(long tableId, Member member) { tableEntity.updateUsedAt(); CustomizeTable table = tableEntity.toDomain(); List timeBoxes = timeBoxEntities.toDomain(); - return CustomizeTableResponse.ofDomain(table, timeBoxes); + return new CustomizeTableResponse(table, timeBoxes); } @Transactional