Skip to content

T-13 커리큘럼 세트 복제 - #67

Open
ff1451 wants to merge 1 commit into
feat/t12-public-curriculumfrom
feat/t13-curriculum-clone
Open

T-13 커리큘럼 세트 복제#67
ff1451 wants to merge 1 commit into
feat/t12-public-curriculumfrom
feat/t13-curriculum-clone

Conversation

@ff1451

@ff1451 ff1451 commented Aug 19, 2026

Copy link
Copy Markdown

Refs #25
Base: feat/t12-public-curriculum (#66)

P2(커리큘럼)의 마지막 티켓. sourceCurriculumId로 트리 전체를 복제한다.

변경

  • CurriculumCreateRequestsourceCurriculumId 추가. 복제 시 name을 비우면 원본 이름을 그대로 쓰고, 복제가 아닌데 이름이 없으면 NAME_REQUIRED(400).
  • 다른 트랙의 세트도 원본으로 쓸 수 있다 — 시안 문구("다른 트랙 커리큘럼 복제해서 시작 가능")를 그대로 따랐다. sourceCurriculumId가 대상 트랙 페이지에 속할 필요는 없다.
  • AdminCurriculumTreeService.cloneTree — 원본의 주차 > 토픽 > 세부항목을 순회하며 새 id로 저장한다. display_order는 원본과 동일하게 유지해 개수·순서를 보존한다(AC-2.8).
  • 복제본은 항상 비공개로 생성된다(T-10부터 있던 규칙 그대로).

테스트

AdminCurriculumCloneIntegrationTest(신규):

  • AC-2.8 복제 후 주차 2개·토픽 순서·세부항목 순서가 원본과 동일, 복제본은 비공개, 원본은 영향받지 않음
  • 이름 없이 복제하면 원본 이름 사용
  • 복제가 아닌데 이름이 없으면 400

./gradlew test를 3회 연속 돌려 전체 통과(74개, 실패 0) 확인.


이걸로 P2(커리큘럼) 완료 — T-10T-13, PR #64#67. 다음은 P3(활동, T-14~T-16)로 넘어간다.

POST /v1/admin/track-pages/{id}/curriculums에 sourceCurriculumId를 주면
트리 전체(주차·토픽·세부항목)를 복제한다. 다른 트랙의 세트도 원본으로 쓸 수
있다 — 시안에 "다른 트랙 커리큘럼 복제해서 시작 가능"이 명시되어 있다.

- CurriculumCreateRequest: sourceCurriculumId 필드 추가. 복제 시 name을
  비우면 원본 이름을 그대로 쓰고, 복제가 아닌데 이름이 없으면
  NAME_REQUIRED(400)
- AdminCurriculumTreeService.cloneTree — 원본의 주차>토픽>세부항목을 순회하며
  새 id로 저장. display_order는 원본과 동일하게 유지(개수·순서 보존, AC-2.8)
- 복제본은 항상 비공개로 생성된다(기존 로직 그대로 — published(false))

테스트: AdminCurriculumCloneIntegrationTest(신규) —
- AC-2.8 복제 후 주차 2개·토픽 순서·세부항목 순서가 원본과 동일, 복제본은
  비공개, 원본은 영향받지 않음
- 이름 없이 복제하면 원본 이름 사용
- 복제가 아닌데 이름이 없으면 400

./gradlew test 3회 연속 전체 통과(74개, 실패 0).

Refs #25

---

이걸로 P2(커리큘럼) 완료 — T-10~T-13, PR #64~#67.
@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ba3201c0-050f-4fad-9cac-7e8d8f551ab5

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant