Skip to content

#576 [Feat] 클래스 생성 중복 요청 방지 - #580

Merged
HYH0804 merged 3 commits into
devfrom
feat/#576
Oct 28, 2026
Merged

HYH0804 merged 3 commits into
devfrom
feat/#576

Conversation

@HYH0804

@HYH0804 HYH0804 commented Oct 28, 2026

Copy link
Copy Markdown
Contributor

#️⃣ 연관된 이슈

📝 작업 내용

✨ Feat

내용 파일
생성 요청에 선택 필드 requestKey 추가 (1~64자, 영문·숫자·-·_) ClassCreateRequest.java
요청 키·본문 해시 저장, UK(owner_id, create_request_key) Classroom.java, V20261028_02__classes_create_request_key.sql
같은 키·같은 내용은 기존 클래스 200, 같은 키·다른 내용은 409 CLASS_409_REQUEST_KEY, 키로 만든 클래스가 삭제됐으면 409 CLASS_409_DELETED ClassroomServiceImpl.java, ClassroomRepository.java, ErrorCode.java
키가 없으면 10초 안에 같은 이름·같은 배틀로 온 요청을 중복으로 보고 직전 클래스 반환 ClassroomServiceImpl.java, ClassroomRepository.java
같은 이용권의 생성 요청을 이용권 행 비관적 락으로 직렬화 (동시 요청 대비) ClassTicketRepository.java, ClassroomServiceImpl.java
단위·통합 테스트(동시 요청 포함), API 명세·ERD 갱신 ClassroomApiIntegrationTest.java, ClassroomServiceImplTest.java, class-api.md, class.puml

📌 공유 사항

  1. DB 마이그레이션 필요: V20261028_02__classes_create_request_key.sql (롤백 V20261028_rollback__classes_create_request_key.sql). ✨ Feat: 중간투표 있는 기존 콘텐츠의 클래스 중간투표 수집 및 리포트 반영 #577 의 V20261028_01 과 번호가 겹치지 않습니다.
  2. 프론트: 생성 화면을 열 때 UUID 하나를 만들어 requestKey 로 보내고, 재시도 시 같은 값을 보내 주세요. 안 보내도 기존처럼 동작합니다(10초 판정).
  3. 이름·운영자 표시 이름의 앞뒤 공백은 같은 내용으로 봅니다.
  4. ✨ Feat: 클래스 멤버 초대코드 노출 및 의견·댓글 클래스 표시 이름 노출 #575, ✨ Feat: 중간투표 있는 기존 콘텐츠의 클래스 중간투표 수집 및 리포트 반영 #577 과 순서와 관계없이 충돌 없이 머지됩니다.

✅ 체크리스트

  • Reviewer에 팀원들을 선택했나요?
  • Assignees에 본인을 선택했나요?
  • 컨벤션에 맞는 Type을 선택했나요?
  • Development에 이슈를 연동했나요?
  • Merge 하려는 브랜치가 올바르게 설정되어 있나요?
  • 컨벤션을 지키고 있나요?
  • 로컬에서 실행했을 때 에러가 발생하지 않나요?
  • 팀원들에게 PR 링크 공유를 했나요?

📸 스크린샷

  • classroom 패키지 테스트 전체 통과 (ClassroomApiIntegrationTest 11건, ClassroomServiceImplTest 20건 포함)

💬 리뷰 요구사항

  1. 키가 있으면 10초 판정을 건너뛰도록 했습니다(키가 다르면 운영자가 의도한 새 클래스로 봄). 괜찮은지 의견 부탁드립니다.

🤖 Generated with Claude Code

https://claude.ai/code/session_013pr5xNDiEmzxnZ2AbtHxVy

HYH0804 and others added 2 commits October 28, 2026 15:01
- 같은 이용권의 생성 요청을 이용권 행 잠금(SELECT ... FOR UPDATE)으로 직렬화한다
- 10초 안에 같은 운영자·이름·배틀(또는 주제 버전)로 만든 클래스가 있으면 새로 만들지 않고 그 클래스를 돌려준다
- 연속 요청·동시 요청 통합 테스트 추가

Co-Authored-By: Claude Opus 5.5 <[email protected]>
- ClassCreateRequest 에 선택 필드 requestKey 추가 (1~64자, 영문·숫자·-·_)
- classes.create_request_key / create_request_hash 저장, UK(owner_id, create_request_key)
- 같은 키·같은 내용은 기존 클래스 반환, 같은 키·다른 내용은 409 CLASS_409_REQUEST_KEY
- 키가 없으면 기존 10초 중복 판정 유지
- 마이그레이션 V20261028_02 (+ 롤백), API 명세·ERD 갱신, 통합 테스트 추가

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013pr5xNDiEmzxnZ2AbtHxVy
@HYH0804 HYH0804 self-assigned this Oct 28, 2026
- createdAt 은 서버 기본 시간대(Auditing)로 채워지는데 비교 기준은 KST 라 UTC 서버(CI)에서 10초 판정이 동작하지 않던 문제

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013pr5xNDiEmzxnZ2AbtHxVy
@HYH0804
HYH0804 merged commit eea7198 into dev Oct 28, 2026
1 check passed
@HYH0804
HYH0804 deleted the feat/#576 branch October 28, 2026 07:03
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