이정수
|
09ed6bcaa6
|
feat(jam): W2-4 심사위원 평가 — criterion UPSERT + 가중집계 + 3중게이트
- JamScoringController: 3중게이트 순서(CSRF 403 → 인증 401 → isJudge[W2-2] 403 → 잼 404 → JamEvalWindow 평가기간 422 → 출품작 404 → isOwnEntry 자기출품 422 → criterion 화이트리스트+score 검증 → UPSERT). @Transactional 원자성
- JamScoresMapper: jam_scores (심사위원,기준,평가단위) UNIQUE 상 INSERT...ON CONFLICT UPSERT(멱등). JamCriteriaMapper, JamScoreStatsMapper(jam_score_stats VIEW 소비)
- §33 인용 alias: JamScoreStatsMapper camelCase 5건 전부 AS "..." (gameId/weightedTotal/simpleTotal/scoredCriteria/judgeCount) — Postgres 케이스폴딩(game_review_stats BUG-2) 회피
- JamEvalWindow 평가기간 게이트, jam-scoring.jsp. 신규 DDL 0(W2-3 동결 소비)
- BibimbapApplicationTests @MockBean 3매퍼
검증: ./mvnw -o test 148/148 GREEN(신규 29: JamScoringControllerTest 19·JamEvalWindowTest 10, 회귀 0). L2 contract PASS — UPSERT ON CONFLICT 멱등·VIEW alias camelCase 보존(비인용 대조군 소문자 폴딩 재현으로 BUG-2 회피 입증)·가중집계 손계산 일치. 집합전수 AC-T1~6 PASS(정책응답 401×2/403×4/404×3/422×5/200×5).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 11:57:23 +09:00 |