Conversation
refactor: 강연 신청 마감일 설정 리팩토링
- LectureEntity에 approvedAt 필드 추가 (승인 시간 자동 저장) - LectureSummaryResponse, LectureDetailResponse에 approvedAt 필드 추가 - LectureService의 toLectureSummary, toLectureDetail 메서드에 approvedAt 포함 - 강연 승인 시 현재 시간이 자동으로 approvedAt에 저장됨 - 강연 조회 API 응답에 승인 시간 정보 포함 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
feat: 강연 승인 시간 필드 추가
feat: 연사자 추가 기능 구현
feat: 리프레시 토큰 API 추가
feat: 신청 대기 학생 수락/거절 기능 추가
…feat/lecture-capacity-limit
refactor: 최대 정원 30명 제한 제거
연사자를 고르려면 userId를 찾을 수단이 필요해 이름·학번으로 찾는 GET /api/users를 추가했습니다. 신청자·대기자 명단은 누가 신청했는지 보고 판단하는 정보라 학생 누구나 볼 수 있게 열고, 누가 거절됐는지는 명단에 뿌릴 정보가 아니라서 개설자와 학생회에게만 내려줍니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UgrkxvMHthfMoDbaZHHDwZ
강연 생성·수정 요청에 applicationDeadline을 되살립니다. 값을 보내면 그대로 쓰고, 비워서 보내면 예전처럼 강연 전 주 목요일 23:59:59로 계산합니다. 강연 시작 이후로 마감을 잡으면 400으로 막습니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UgrkxvMHthfMoDbaZHHDwZ
feat: 승인 시각 기준 신청 오픈 시간 적용
refactor: 신청 마감일 설정 변경
develop이 applicationDeadline을 필수(@NotNull @future)로 받고 validateApplicationDeadline으로 검증하도록 먼저 병합돼, 같은 기능을 선택 입력으로 구현했던 브랜치 쪽 resolveApplicationDeadline은 걷어냈습니다. 사용자 검색 API와 신청자 명단 공개 범위 변경은 그대로 유지합니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0148L349fQXWstcyAaHxxL6h
…visibility feat: 사용자 검색 API 추가 및 신청자 명단 공개 범위 조정
배포된 main에만 있던 핫픽스 두 건이 develop에 없어 develop -> main 배포가 충돌 상태였습니다. 그냥 develop 쪽으로 풀면 프로덕션 수정이 되돌아갑니다. 핫픽스 #38(신청 시각 UTC 비교)은 develop이 시간 판단을 LectureTimeValidator로 옮기면서 빠졌습니다. SCHOOL_ZONE/schoolTimeNow/toSchoolTime을 되살리고, validateApplicationTime에 넘기는 approvedAt·createdAt을 한국 시간으로 옮겨 넘깁니다. 서버는 UTC로 도는데 마감 시각은 사용자가 한국 시간으로 넣은 값이 그대로 저장되어, 변환 없이 비교하면 9시간이 밀립니다. 핫픽스 #39(마감 후 취소 차단)는 그대로 되살리지 않았습니다. develop에서 마감 뒤 신청은 거절 대신 대기로 들어가고 수락해야 확정되는 것으로 바뀌었고, 프론트도 마감 뒤 대기 취소를 열어 둔 상태입니다. 확정된 신청(ENROLLED)만 마감 후 잠그고, 대기는 아직 자리가 아니라서 스스로 뺄 수 있게 했습니다. 자동 대기 승급(promoteFirstWaitingUser, promoteWaitingAfterDeadline)은 develop이 수동 수락으로 대체했으므로 복원하지 않았습니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0148L349fQXWstcyAaHxxL6h
sooooooobinn
approved these changes
Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📋 개요
develop에 쌓인 12개 PR을 프로덕션에 내보내기 위한 배포 PR입니다. 백엔드 마지막 배포는 2026-08-27(PR #39)이고, 그 뒤 머지된 기능이 전부 배포되지 않은 상태입니다. CD는mainpush에서만 돌기 때문에 이 PR이 머지돼야 실제로 나갑니다.프론트에서는 Rels-front #49가 이미 머지됐고, 그 화면들이 여기 담긴 API에 의존합니다. 이 PR이 프론트 배포보다 먼저 나가야 합니다. 순서가 바뀌면 연사자 검색이 404, 신청자 명단이 403입니다.
✅ 작업 내용
@NotNull @Future)GET /api/users) 및 신청자 명단 공개 범위 조정main핫픽스 백머지 및 재적용 (a502366)🔗 관련 이슈
없음
🧪 테스트
./gradlew test통과 (30 tests, 0 failures)💬 리뷰어에게
main에만 있던 핫픽스 두 건이develop에 없어 충돌 상태였습니다.a502366에서 백머지하며 재적용했습니다. 그냥 develop 쪽으로 풀었으면 프로덕션 수정 두 건이 되돌아갔을 자리라, 이 커밋을 중점적으로 봐주세요.핫픽스 #38 — 신청 시각 UTC 비교 (
de764e2)develop이 시간 판단을LectureTimeValidator로 옮기면서 빠졌습니다.SCHOOL_ZONE,schoolTimeNow(),toSchoolTime()을 되살리고,validateApplicationTime에 넘기는approvedAt·createdAt을 한국 시간으로 옮겨서 넘깁니다.서버는 UTC로 도는데
applicationDeadline은 사용자가 한국 시간으로 넣은 값이 그대로 저장되므로, 변환 없이 비교하면 9시간이 밀립니다. 변환 없이 두면approvalTime.toLocalDate().atTime(16, 20)이 한국 시간 다음 날 01:20이 됩니다.라이프사이클 갱신과 스케줄러(
syncLectureStatuses)도 전부schoolTimeNow()기준으로 통일했습니다.핫픽스 #39 — 마감 후 신청 취소 차단 (
d8ff54f) — 그대로 복원하지 않았습니다핫픽스는 마감 뒤 취소를 전부 403으로 막았는데,
develop에서 마감 뒤 신청은 거절 대신 대기로 들어가고 수락해야 확정되는 것으로 바뀌었습니다. 프론트도 이 전제로 마감 뒤 대기 취소를 열어 둔 상태라, 그대로 복원하면 그 화면이 403을 받습니다.확정된 신청(
ENROLLED)만 마감 후 잠그고, 대기(WAITING)는 아직 자리를 차지한 게 아니라서 마감 뒤에도 스스로 뺄 수 있게 했습니다. 프론트 현재 동작과 일치합니다.cancelRejectsConfirmedEnrollmentAfterDeadline,cancelAllowsWaitingEnrollmentAfterDeadline두 테스트로 덮었습니다.복원하지 않은 것: 자동 대기 승급(
promoteFirstWaitingUser,promoteWaitingAfterDeadline)은develop이 개설자·학생회의 수동 수락으로 대체한 것이라 되살리지 않았습니다.enrollmentOpenAt()와extractGradeFromStudentNumber()의LectureService사본도 각각LectureTimeValidator와LectureLifecycleHandler로 옮겨간 뒤라 정리했습니다.GET /api/lectures/discord만 호출하는 읽기 전용이고(코드에 쓰기 호출 자체가 없습니다), 필드 조회도 camelCase·snake_case를 모두 시도하는 방식이라 응답 변화에 관대합니다.main→develop백머지는 이번a502366으로 이미 끝냈습니다. 이 PR 머지 후에는 추가 백머지가 필요 없습니다.🤖 Generated with Claude Code
https://claude.ai/code/session_0148L349fQXWstcyAaHxxL6h