Skip to content

Commit

Permalink
fix: itemOrder가 중복되고 제대로 정렬되지 않는 문제 해결 (#227)
Browse files Browse the repository at this point in the history
  • Loading branch information
JJimini authored Sep 20, 2024
1 parent e3db616 commit cd600e0
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void manageCurriculum(final CurriculumItemManageRequest request, final Lo

final List<CurriculumItemManageDetailRequest> deletedCurriculumItems = request.deletedCurriculumItems();
deleteCurriculum(deletedCurriculumItems);
sortCurriculum();
sortCurriculum(studyId);
}

public void checkCurriculum(final Long curriculumId, final Long participantId, final Long memberId) {
Expand Down Expand Up @@ -135,9 +135,9 @@ private void deleteCurriculum(final List<CurriculumItemManageDetailRequest> dele
});
}

private void sortCurriculum() {
final List<CurriculumItem> sortedCurriculum = curriculumItemRepository.findAllByOrderByItemOrderAsc();

private void sortCurriculum(final Long studyId) {
final List<CurriculumItem> sortedCurriculum = curriculumItemRepository.findAllByStudyIdOrderByItemOrderAsc(
studyId);
IntStream.range(0, sortedCurriculum.size())
.forEach(i -> sortedCurriculum.get(i).updateItemOrder(i + 1));
curriculumItemRepository.saveAll(sortedCurriculum);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import doore.study.domain.ParticipantCurriculumItem;
import doore.study.domain.repository.CurriculumItemRepository;
import doore.study.domain.repository.ParticipantCurriculumItemRepository;
import java.util.Comparator;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand All @@ -18,14 +19,15 @@ public class CurriculumItemQueryService {
private final ParticipantCurriculumItemRepository participantCurriculumItemRepository;

public List<CurriculumItemResponse> getCurriculums(final Long studyId) {
return CurriculumItemResponse.from(curriculumItemRepository.findAllByStudyId(studyId));
return CurriculumItemResponse.from(curriculumItemRepository.findAllByStudyIdOrderByItemOrderAsc(studyId));
}

public List<PersonalCurriculumItemResponse> getMyCurriculum(final Long studyId, final Long memberId) {
final List<ParticipantCurriculumItem> participantCurriculumItems =
participantCurriculumItemRepository.findAllByStudyIdAndMemberId(studyId, memberId);
return participantCurriculumItems.stream()
.map(PersonalCurriculumItemResponse::from)
.sorted(Comparator.comparingInt(PersonalCurriculumItemResponse::itemOrder))
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public interface CurriculumItemRepository extends JpaRepository<CurriculumItem,
List<Long> findIdsByStudyId(Long studyId);

Long countByStudyId(Long studyId);

List<CurriculumItem> findAllByStudyIdOrderByItemOrderAsc(Long studyId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

public class CurriculumItemQueryServiceTest extends IntegrationTest {
public class CurriculumItemQueryServiceTest extends IntegrationTest {
@Autowired
private CurriculumItemCommandService curriculumItemCommandService;
@Autowired
Expand All @@ -54,17 +54,18 @@ public class CurriculumItemQueryServiceTest extends IntegrationTest {
private Long memberId;
private Member member;


@BeforeEach
void setUp() {
study = studyRepository.save(algorithmStudy());

curriculumItem1 = CurriculumItem.builder().id(1L).itemOrder(1).name("Spring Study").study(study).build();
curriculumItemRepository.save(curriculumItem1);
curriculumItem2 = CurriculumItem.builder().id(2L).itemOrder(2).name("CS Study").study(study).build();
curriculumItemRepository.save(curriculumItem2);
curriculumItem3 = CurriculumItem.builder().id(3L).itemOrder(3).name("Infra Study").study(study).build();
curriculumItemRepository.save(curriculumItem3);
curriculumItem1 = CurriculumItem.builder().itemOrder(1).name("Spring Study").study(study).build();
curriculumItem1 = curriculumItemRepository.save(curriculumItem1);

curriculumItem2 = CurriculumItem.builder().itemOrder(2).name("CS Study").study(study).build();
curriculumItem2 = curriculumItemRepository.save(curriculumItem2);

curriculumItem3 = CurriculumItem.builder().itemOrder(3).name("Infra Study").study(study).build();
curriculumItem3 = curriculumItemRepository.save(curriculumItem3);

request = CurriculumItemManageRequest.builder()
.curriculumItems(getCurriculumItems())
Expand All @@ -80,30 +81,48 @@ void setUp() {
.build());
}


private List<CurriculumItemManageDetailRequest> getCurriculumItems() {
final List<CurriculumItemManageDetailRequest> curriculumItems = new ArrayList<>();
curriculumItems.add(
CurriculumItemManageDetailRequest.builder().id(1L).itemOrder(1).name("Change Spring Study").build());
curriculumItems.add(CurriculumItemManageDetailRequest.builder().id(2L).itemOrder(4).name("CS Study").build());
CurriculumItemManageDetailRequest.builder().id(curriculumItem1.getId())
.itemOrder(1)
.name("Change Spring Study")
.build());
curriculumItems.add(
CurriculumItemManageDetailRequest.builder()
.id(curriculumItem2.getId())
.itemOrder(4)
.name("CS Study")
.build());
curriculumItems.add(
CurriculumItemManageDetailRequest.builder().id(3L).itemOrder(2).name("Infra Study").build());
CurriculumItemManageDetailRequest.builder()
.id(curriculumItem3.getId())
.itemOrder(2)
.name("Infra Study")
.build());
curriculumItems.add(
CurriculumItemManageDetailRequest.builder().itemOrder(3).name("Algorithm Study").build());
CurriculumItemManageDetailRequest.builder()
.itemOrder(3)
.name("Algorithm Study")
.build());
return curriculumItems;
}

private List<CurriculumItemManageDetailRequest> getDeletedCurriculumItems() {
final List<CurriculumItemManageDetailRequest> deletedCurriculumItems = new ArrayList<>();
deletedCurriculumItems.add(
CurriculumItemManageDetailRequest.builder().id(3L).itemOrder(2).name("Infra Study").build());
CurriculumItemManageDetailRequest.builder()
.id(curriculumItem3.getId())
.itemOrder(2)
.name("Infra Study")
.build());
return deletedCurriculumItems;
}

@Test
@DisplayName("[성공] 정상적으로 수정된 커리큘럼을 조회할 수 있다.")
public void getMyCurriculum_정상적으로_수정된_커리큘럼을_수정할_수_있다() throws Exception {
//given
// given
Participant participant = Participant.builder().member(member).studyId(study.getId()).build();
participantRepository.save(participant);

Expand All @@ -124,16 +143,27 @@ private List<CurriculumItemManageDetailRequest> getDeletedCurriculumItems() {

curriculumItemCommandService.manageCurriculum(request, study.getId(), memberId);

//when
List<ParticipantCurriculumItem> items = participantCurriculumItemRepository.findAll();
// when
List<CurriculumItem> updatedCurriculumItems = curriculumItemRepository.findAllByStudyIdOrderByItemOrderAsc(
study.getId());
List<PersonalCurriculumItemResponse> responses = curriculumItemQueryService.getMyCurriculum(study.getId(),
memberId);

//then
assertThat(responses).hasSize(items.size());
System.out.println(responses);
assertThat(responses.get(0).id()).isEqualTo(items.get(0).getId());
assertThat(responses.get(1).id()).isEqualTo(items.get(1).getId());
assertThat(responses.get(2).id()).isEqualTo(items.get(2).getId());
// then
assertThat(responses).hasSize(updatedCurriculumItems.size());

// 각 CurriculumItem의 itemOrder가 올바르게 재할당되었는지 확인
for (int i = 0; i < updatedCurriculumItems.size(); i++) {
CurriculumItem item = updatedCurriculumItems.get(i);
PersonalCurriculumItemResponse response = responses.get(i);
assertThat(response.id()).isEqualTo(item.getId());
assertThat(response.itemOrder()).isEqualTo(item.getItemOrder());
}

// itemOrder의 중복 여부 확인
List<Integer> itemOrders = responses.stream()
.map(PersonalCurriculumItemResponse::itemOrder)
.toList();
assertThat(itemOrders).doesNotHaveDuplicates();
}
}

0 comments on commit cd600e0

Please sign in to comment.