Skip to content

release: dev → main - #172

Merged
danjee2009 merged 131 commits into
mainfrom
dev
Oct 19, 2026
Merged

danjee2009 merged 131 commits into
mainfrom
dev

Conversation

@danjee2009

Copy link
Copy Markdown
Member

요약

dev의 누적 변경(127 커밋)을 main에 반영합니다.

주요 변경

확인

  • 로컬 미커밋 변경(랜딩 third-section)은 포함되지 않음

🤖 Generated with Claude Code

danjee2009 and others added 30 commits September 29, 2026 17:51
- 수정 요청의 이름 키를 name에서 username으로 변경
- 사용하지 않는 getMyPageUser/MyPageUser 제거, 조회는 getMyInfo로 통일
- 저장 성공 후 getMyInfo로 재조회해 스토어 갱신

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 업로드 성공 후 getMyPageMetaData로 다시 조회해 화면 상태 갱신
- 재조회 실패 시 입력값으로 대체

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix: 회원정보 수정 요청을 서버 계약에 맞춤
Pages without load-time API calls (interview setup, main, completed) never
received a 401 after the session expired, so users stayed on them until the
next request. MainLayout now calls /me on /main route changes and when the
tab becomes visible, reusing the existing refresh → /login flow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 인증 서버 PATCH /users/me가 이메일을 수정하지 않으므로 수정 요청에서 email 제외
- 편집 대상과 필수 입력 검사에서 이메일을 빼고 입력칸을 읽기 전용으로 표시

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- PATCH /users/me가 수정된 사용자를 돌려주므로 재조회 대신 응답으로 갱신
- 응답이 비었을 때만 getMyInfo로 재조회하고, 그마저 실패하면 입력값으로 갱신
- 응답 정규화를 위해 getMyInfo의 normalizeUserMe와 응답 타입을 export

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 직군은 면접 설정의 전문 분야에서만 고르는 A안으로 API·인증 서버가 구현되어 마이페이지 직무 선택을 제거
- 포트폴리오 업로드 요청의 jobRole, MyPageMetaData.jobRole, initialJobRole 복원 로직 제거
- 사용하지 않게 된 직무 옵션 상수와 select 스타일 제거

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- savePortfolio는 호출하는 곳 없이 jobRole을 보내던 중복 업로드 함수라 제거
- 포트폴리오 업로드는 getMyPageData의 uploadMyPageMetaData로 일원화

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ge-token-check

feat: 메인/마이페이지 토큰 검증 추가
fix: 마이페이지 회원정보·직군을 서버 구현에 맞춤
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	tests/interview-recording.browser.mjs
danjee2009 and others added 20 commits October 19, 2026 11:16
dev의 #163은 자료가 없어 면접 준비가 404이면 마이페이지 링크를 보여 줬다.
초안 복구 흐름으로 바꾸면서 빠진 안내를 되살리고, 생성 뒤 면접 조회 단계를
반영해 시작 판정 브라우저 검사를 새 버튼 문구와 흐름에 맞춘다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 기업 코멘트 링크로 들어왔을 때만 스크롤하고 탭 클릭에는 스크롤하지 않는다
- 탭 클릭 시 다른 쿼리 값을 지우지 않고 questionId만 바꾼다
- 초안 본문의 major 검증을 직무 코드 9개(JOB_ROLES) 기준으로 맞춘다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SOLO 진행 화면이 면접 생성 시점 스냅샷의 질문 수와 폴백값 10을 써서
"Question 01 / 10"으로 보였다. 질문 준비 완료 때 세션에 들어오는
totalQuestionCount를 쓰고, 개수를 모르면(0) 분모를 "--"로 표시한다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 완료 이동 state에 interviewId를 넣고, "피드백 보러가기"가
  /main/feedback/overall/{id}로 fromCompletion state와 함께 이동한다.
  state가 없으면(새로고침 등) 지금처럼 목록으로 간다.
- 면접 COMPLETED는 Chat → API가 비동기로 반영하므로, fromCompletion으로
  들어왔는데 아직 IN_PROGRESS면 GET /api/interviews/get을 3초 간격으로
  최대 60초 다시 조회하고 그동안 "면접 기록을 저장하고 있어요"를 보여 준다.
  COMPLETED가 되면 기존 피드백 조회·폴링으로 넘어가고, 60초를 넘기면
  기존 오류 문구를 보여 준다.
- 재조회 요청마다 시간 제한을 두고, 재시도할 수 없는 오류(4xx)는 바로
  멈추고 서버 오류 문구를 보여 준다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- SOLO 텍스트·음성 문항 수, 개수 미상 "--", MULTI 표시 회귀
- 완료 → 종합 피드백 이동, state 없는 완료 화면의 목록 이동
- IN_PROGRESS → COMPLETED 전환 뒤 PENDING 폴링, 60초 초과, 재시도 가능/불가 오류,
  fromCompletion 없음·ABANDONED·이미 COMPLETED일 때 재조회 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
수정계획 §2-4 4번. 종합 화면의 평가 축·빈 값 문구·음성 영역(§2-4 1~3번)은
후속 계획(종합피드백-평가축-섹션노출-구현계획)과 PR #169가 우선해 이 PR에서 제외한다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 난이도: getCareerLabel(career) → getLevelLabel(feedback.level ?? interview.persona.level)
- FeedbackData에 level 추가(mode는 PR #169가 같은 타입에 추가해 중복 선언을 피함)
- InterviewResponse.persona는 옵셔널로 읽음(API PR 머지 전에도 깨지지 않음)
- SOLO 면접관 이름은 저장값 끝의 -{uuid}를 떼고 표시, MULTI는 personaName을 쓰지 않고 "면접관 N명" 유지

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- sortFeedbackList(items, { key: date|score, order: asc|desc })로 분리, createdAt 타임스탬프로 비교
- 점수 없는 항목은 두 방향 모두 맨 뒤(그 안·동점은 최신순)
- 정렬 상태를 URL 쿼리 sort·order에 replace로 저장, 기본값이면 쿼리 생략, 잘못된 값은 기본값
- 기준 셀렉트(정렬 기준) + 방향 토글 버튼(정렬 방향), 기준을 바꾸면 내림차순으로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 성향/난이도(피드백 없는 면접 포함), SOLO 이름 접미사 제거, MULTI 인원 수, 중단됨
- 정렬 기본값·쿼리 생략, 점수 정렬·방향 토글, 종합 진입 후 뒤로 유지, 잘못된 쿼리 기본값

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…edit

feat: 마이페이지 직무·문서 리스트·보완 입력 한 번에 저장 (#160)
feat: 기업 데이터셋 연동과 면접 생성 복구·피드백 구현 (#166)
- aria-label을 고정 "정렬 방향"에서 "정렬 방향: {현재 조합 이름}"으로 변경(예: 정렬 방향: 최신순)
- 브라우저 테스트 선택자·검증을 새 접근성 이름에 맞춤

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…isibility

fix: 종합 피드백 평가 축과 면접 유형별 섹션 표시 수정 (#168)
fix: 텍스트 면접 문항 수 표시와 면접 완료 후 종합 피드백 이동
fix: 피드백 목록 난이도·면접관·중단됨 표시와 정렬 기준·방향 선택
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T05:14:14.648183Z 954692b PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@danjee2009 danjee2009 left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

211개 파일의 릴리스 변경에서 인터뷰 준비·진행, 녹화 업로드, 피드백·프로필 흐름과 API 연동을 검토했습니다. 확인된 실질적 문제는 없습니다. 격리된 체크아웃에서 lint, build, Node 테스트 51건이 통과했습니다. 브라우저 E2E는 실행하지 않았고 PR에 연결된 GitHub 검사는 보고되지 않았습니다.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 954692b645

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
const submission = draft.submission!;
// 새로고침에서 SUBMITTING도 같은 본문과 키로만 재전송한다.
const result = await createInterview(submission.requestBody, submission.idempotencyKey);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Gate automatic create replay on server idempotency

When the initial create succeeds server-side but its response is lost, this call is automatically repeated with the saved key on reload. The repository's docs/company-interviews.md explicitly states that the inspected InterviewController does not yet process Idempotency-Key, so this recovery path can create a second interview rather than recover the first. Do not enable the replay until the backend contract is deployed, or reconcile the original request without issuing another create.

Useful? React with 👍 / 👎.

Comment on lines +59 to +61
) : errorMessage || answersErrorMessage || !interview ? (
<S.StateCard aria-live="polite">
<S.StateText>{errorMessage ?? "면접 정보를 찾을 수 없습니다."}</S.StateText>
<S.StateText>{errorMessage ?? answersErrorMessage ?? "면접 정보를 찾을 수 없습니다."}</S.StateText>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not block usable feedback when answer lookup fails

If /api/answer/getAll fails while the interview and feedback requests succeed, this condition replaces the entire detailed-feedback page with an error. The feedback records already carry userAnswer, and buildFeedbackDetailContent only uses the separately fetched answer as a fallback, so fully renderable feedback becomes unavailable because an optional enrichment request failed. Render the feedback with its embedded answers and surface the lookup failure only where a fallback answer is actually missing.

Useful? React with 👍 / 👎.

danjee2009 and others added 2 commits October 19, 2026 14:20
API가 N:1 면접관을 기술 면접관 먼저로 재정렬해 저장하므로
getCreatedInterview는 구성만 비교하고 순서는 비교하지 않는다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
서버가 long-poll 대기 없이 PENDING을 바로 돌려주면 대기 없이 재요청이
반복되던 문제를 막는다. 기존 오류 재시도 대기 로직을 공용 wait로 정리했다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…na-order

fix: 생성된 면접 확인 시 N:1 면접관 순서 차이를 불일치로 보지 않음
…delay

fix: 질문 음성 PENDING 응답 후 재요청에 최소 1초 간격 적용
@danjee2009
danjee2009 merged commit 72bee36 into main Oct 19, 2026
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.

3 participants