Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/learnings")
@Tag(name = "학습(Learning)", description = "학습 홈/목록/커리큘럼/단계별 조회 및 진행 결과 저장 API")
@Tag(name = "학습", description = "학습 API")
public class LearningController {

private final LearningService learningService;

@Operation(
summary = "학습 홈 조회",
summary = "학습 홈 조회 API",
description = "최근 학습 이어서 하기(currentLearning, 재도전 포함), "
+ "난이도별 대표 학습 주제(최대 3개, 데이터 없는 난이도는 제외), 실전 반주법 대표 3개를 조회합니다."
)
Expand All @@ -45,7 +45,7 @@ public ApiResponse<LearningHomeResponseDTO.HomeResultDTO> getHome() {
}

@Operation(
summary = "학습 결과 저장",
summary = "학습 결과 저장 API",
description = "학습 단계(learningStepId)의 채점 점수를 저장합니다. 기존 진행 기록이 있으면 갱신하고, 없으면 새로 생성합니다."
)
@PostMapping("/{learningId}/result")
Expand All @@ -60,7 +60,7 @@ public ApiResponse<LearningResultResponseDTO.SaveResultResultDTO> saveLearningRe
}

@Operation(
summary = "학습 진행률 조회",
summary = "학습 진행률 조회 API",
description = "완료(score>=90) 단계 수 / 전체 단계 수 기준으로 패키지 단위 진행률(progressRate, 0~100)을 조회합니다."
)
@GetMapping("/{learningId}/progress")
Expand All @@ -73,7 +73,7 @@ public ApiResponse<LearningProgressResponseDTO.ProgressResultDTO> getLearningPro
}

@Operation(
summary = "학습 커리큘럼 조회",
summary = "학습 커리큘럼 조회 API",
description = "패키지 상세 정보, 전체 진행률(progress), 단계별 목록(상태·점수 포함)을 조회합니다."
)
@GetMapping("/{learningId}")
Expand All @@ -86,7 +86,7 @@ public ApiResponse<LearningCurriculumResponseDTO.CurriculumResultDTO> getCurricu
}

@Operation(
summary = "학습 단계별 조회",
summary = "학습 단계별 조회 API",
description = "단계별 이론 설명, 연습 팁, 모범 연주 예시(있으면), 코드 예시를 조회합니다."
)
@GetMapping("/{learningId}/steps/{learningStepId}")
Expand All @@ -100,7 +100,7 @@ public ApiResponse<LearningStepDetailResponseDTO.StepDetailResultDTO> getStepDet
}

@Operation(
summary = "단계별 연습 실행 정보 조회",
summary = "단계별 연습 실행 정보 조회 API",
description = "[이 이론으로 실습하기] 클릭 시 필요한 bpm/keySignature/midiData를 조회합니다. "
+ "채점 후 점수 저장은 이 API가 아니라 POST /{learningId}/result가 담당합니다."
)
Expand All @@ -115,7 +115,7 @@ public ApiResponse<LearningPracticeDataResponseDTO.PracticeDataResultDTO> getPra
}

@Operation(
summary = "학습 주제(THEORY) 전체보기",
summary = "학습 주제 전체보기 API",
description = "난이도(difficulty) 탭별로 학습 주제 목록을 조회합니다. difficulty는 필수입니다."
)
@GetMapping("/theory")
Expand All @@ -129,7 +129,7 @@ public ApiResponse<LearningTheoryListResponseDTO.TheoryListResultDTO> getTheoryL
}

@Operation(
summary = "실전 반주법 패키지(ACCOMPANIMENT) 전체보기",
summary = "실전 반주법 패키지 전체보기 API",
description = "난이도 구분 없이 전체 목록을 제목 기준 이름순으로 조회합니다. 각 항목의 progressRate는 진행률(%)만 반환합니다."
)
@GetMapping("/accompaniment")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/users")
@Tag(name = "사용자", description = "사용자 관련 API")
@Tag(name = "사용자", description = "사용자 API")
public class UserController {

private final UserService userService;

@Operation(
summary = "닉네임 중복 확인",
summary = "닉네임 중복 확인 API",
description = "회원가입 온보딩 단계 또는 프로필 수정 시, 닉네임이 형식 규칙(한글/영문/숫자 2~10자)을 만족하는지, "
+ "이미 다른 유저가 사용 중인지 확인합니다. 인증이 필요하며, 본인이 이미 쓰고 있는 닉네임은 중복 처리되지 않습니다."
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/users/me/profile")
@Tag(name = "사용자 프로필", description = "프로필 조회/최초 등록(온보딩)/수정 API")
@Tag(name = "사용자", description = "사용자 API")
public class UserProfileController {

private final UserProfileService userProfileService;

@Operation(
summary = "프로필 조회",
summary = "프로필 조회 API",
description = "현재 로그인한 사용자의 닉네임, 프로필 이미지, 대표 악기, 화성학 숙련도, 구독 등급, 누적 학습 통계를 조회합니다."
)
@GetMapping
Expand All @@ -34,7 +34,7 @@ public ApiResponse<UserProfileResponseDTO.ProfileResponse> getMyProfile() {
}

@Operation(
summary = "프로필 최초 등록 (온보딩)",
summary = "프로필 최초 등록(온보딩) API",
description = "닉네임, 화성학 숙련도를 입력받아 Student/StudentInstrument(대표 악기 PIANO)/Subscription을 하나의 트랜잭션으로 생성합니다. "
+ "구독 등급은 MVP 기간 동안 결제 없이 항상 PRO로 서버에서 고정됩니다. "
+ "이미 온보딩을 완료한 사용자가 다시 호출하면 409(USER_409_02)가 반환됩니다."
Expand All @@ -48,7 +48,7 @@ public ApiResponse<UserProfileResponseDTO.OnboardingResponse> registerProfile(
}

@Operation(
summary = "프로필 수정",
summary = "프로필 수정 API",
description = "닉네임과 화성학 숙련도를 부분 수정합니다. 요청에 생략하거나 null로 보낸 필드는 기존 값을 유지합니다. "
+ "대표 악기, 프로필 이미지, 구독 등급은 이 API에서 변경되지 않습니다."
)
Expand Down