Skip to content

fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236) - #243

Merged
ychany merged 18 commits into
devfrom
fix/236-qa-fixes
Jun 18, 2026
Merged

fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236)#243
ychany merged 18 commits into
devfrom
fix/236-qa-fixes

Conversation

@ychany

@ychany ychany commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

작업 요약

  • 토너먼트 시작 흐름에 안내 모달 3종 추가 (부전승 / 담기 시간 종료 / 주최자 시작 알림)
  • 초대 마감 시각 picker 의 시간대 / 9시간 어긋남 / 만료 표시 / drag·remount 이슈 일괄 수정
  • 영수증 이미지 캡처에서 상품 사진 누락 및 CORS 차단 회피
  • 토큰 갱신·홈/보관함 헤더 등 기타 자잘한 QA 보정 누적분 머지

작업 세부 내용

토너먼트 시작 흐름

  • ByeWarningDialog 신규 — 후보 수가 2의 거듭제곱이 아닐 때 시작 직전에 노출 (부전승 안내)
  • DepositClosedDialog 신규 — 담기 시간 만료 시 주최자에게 자동 노출, 시작 유도
  • OwnerStartedDialog 신규 — 주최자 시작 SSE(TOURNAMENT_STARTED) 신호를 받아 ownerStarted: false→true 변화 감지 시 참여자에게 자동 노출
  • 시작 버튼 비활성 조건 정리 — 초대 마감 시 참여자는 후보 수와 무관하게 시작 불가
  • 기존 ConfirmStartDialog / ConfirmExitDialog 의 raw <button> → 공통 Button 컴포넌트로 통일

초대 마감 시각 picker (변경 시트)

  • 휠 picker 드래그 후 본인 위치가 유지되지 않고 한 칸으로 되돌아가는 버그 수정 (key 에서 inviteExpiresAt 의존 제거 → drag 중 react-query refetch 로 인한 remount 차단)
  • ISO 8601 UTC (Z 접미사 포함) 형식으로 전송하도록 변경 — 서버 OffsetDateTime/Instant 호환
  • 서버가 정상 ISO UTC 로 응답한 후로는 parseServerLocalDateTime 의 Z 제거 로직을 제거 (9시간 어긋남으로 "만료됨" 잘못 표시되던 문제 해결)

영수증 이미지 공유

  • 상품 사진만 캡처에서 빠지던 문제 — next/image proxy URL (/_next/image?url=...) 로 same-origin 우회
  • html-to-image 의 cacheBust: false + fetchRequestInit: { cache: 'force-cache', mode: 'cors' } 로 S3 / 외부 도메인 CORS 차단 완화

결과 페이지

  • 플레이 체험 게스트(CLONE) 사용자에게는 결과 페이지의 "전체 결과 보기" 카드를 노출하지 않음

연관 이슈

closes #236

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 토너먼트 초대 마감 기간 설정 기능 추가 (기본 30분)
    • 담기 마감 시 자동 알림 다이얼로그 추가
    • 주최자가 토너먼트 시작 시 참여자 알림 다이얼로그 추가
    • 토너먼트 시작 전 부전승 경고 안내 추가
  • Bug Fixes

    • 영수증 이미지 공유 시 이미지 로딩 최적화
    • 참여자 선택 휠 드래그 상호작용 개선
    • 그룹 결과 표시 조건 수정
  • Improvements

    • 버튼 스타일 일관성 강화
    • 날짜/시간 형식 처리 개선

@vercel

vercel Bot commented Jun 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
depromeet Ready Ready Preview, Comment Jun 18, 2026 8:15am

@github-actions
github-actions Bot requested review from iOdiO89 and kanghaeun June 18, 2026 07:54
@github-actions

Copy link
Copy Markdown

No description provided.

@github-actions github-actions Bot added the fix Something isn't working label Jun 18, 2026
@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@ychany, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 39 minutes and 1 second. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5190f34d-3bdc-46d4-a06b-9e3315361ac6

📥 Commits

Reviewing files that changed from the base of the PR and between e1226f9 and c4e745e.

📒 Files selected for processing (5)
  • apps/web/src/app/not-found.tsx
  • apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx
  • apps/web/src/app/tournament/[id]/create/_components/deposit-closed-dialog/DepositClosedDialog.tsx
  • apps/web/src/app/tournament/[id]/create/_components/invite-friends/WheelColumn.tsx
  • apps/web/src/app/tournament/[id]/create/_components/owner-started-dialog/OwnerStartedDialog.tsx

Walkthrough

토너먼트 생성 요청에 기본 초대 마감 시간(30분)을 추가하고, 초대 만료 시각 포맷을 UTC ISO 8601로 통일했습니다. 담기 마감·주최자 시작·부전승 경고 안내 모달 3종을 신설해 토너먼트 시작 흐름을 확장했으며, WheelColumn의 드래그 인터랙션을 직접 구현으로 대체했습니다. 결과 영수증 이미지 캡처 시 크로스오리진 문제를 Next.js 프록시 URL로 해결했습니다.

Changes

토너먼트 초대 만료 시각 UTC 형식 통일

Layer / File(s) Summary
날짜 파싱 유틸 및 InviteExpiresPicker UTC 전환
apps/web/src/utils/formatDate.ts, apps/web/src/app/tournament/[id]/create/_components/invite-friends/InviteExpiresPicker.tsx
parseServerLocalDateTime이 Z 접미사를 제거하던 로직을 원문 그대로 파싱하도록 변경. InviteExpiresPickertoServerDateTimeString(UTC ISO 8601)으로 교체해 onConfirm에 UTC 문자열 전달.
토너먼트 생성 시 기본 초대 마감 시간(30분) 추가
apps/web/src/app/home/_types/tournament.ts, apps/web/src/app/home/_components/CreateTournamentDialog.tsx
PostCreateTournamentRequestTinviteDurationMinutes?: number 추가, CreateTournamentDialog에서 DEFAULT_INVITE_DURATION_MINUTES = 30 상수로 생성 요청에 포함.

WheelColumn 드래그 인터랙션 재구현 및 피커 리마운트 버그 수정

Layer / File(s) Summary
WheelColumn 드래그/클릭 인터랙션 재구현
apps/web/src/app/tournament/[id]/create/_components/invite-friends/WheelColumn.tsx
hasInitializedRef로 초기 스크롤 1회 제한, handlePointerDown/Move/End로 직접 드래그 처리, snap 클래스 제거 및 드래그 중 클릭 차단 로직 추가.
InviteFriendsDialog 피커 리마운트 버그 수정
apps/web/src/app/tournament/[id]/create/_components/invite-friends/InviteFriendsDialog.tsx
InviteExpiresPickerkeyinviteExpiresAt 기반에서 isPickerOpen 기반으로 변경해 값 변경 시 리마운트 방지.

토너먼트 시작 흐름 개선 (모달 3종 신설 + 부전승 경고)

Layer / File(s) Summary
DepositClosedDialog, OwnerStartedDialog, ByeWarningDialog 신규 컴포넌트
apps/web/src/app/tournament/[id]/create/_components/deposit-closed-dialog/DepositClosedDialog.tsx, ...owner-started-dialog/OwnerStartedDialog.tsx, ...tournament-start-button/ByeWarningDialog.tsx
담기 마감 안내, 주최자 시작 알림, 부전승 경고 모달을 각각 open/onOpenChange/onStart props 기반으로 구현.
TournamentCreateClient에 DepositClosed/OwnerStarted 모달 연결
apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx
useEffect+useRefownerStarted 전이 감지 및 자동 모달 오픈, dismissed 플래그로 재오픈 차단, postTournamentStartMutation()으로 시작 연결.
TournamentStartButton 부전승 경고 흐름 및 비활성화 조건 수정
apps/web/src/app/tournament/[id]/create/_components/tournament-start-button/TournamentStartButton.tsx
isPowerOfTwo(count) 체크로 비거듭제곱 시 ByeWarningDialog 오픈, isDepositClosed가 항상 버튼을 비활성화하도록 조건 수정.
다이얼로그 버튼을 공용 Button 컴포넌트로 교체
apps/web/src/app/tournament/[id]/create/_components/tournament-header/ConfirmExitDialog.tsx, ...tournament-start-button/ConfirmStartDialog.tsx
네이티브 <button>을 공용 Button 컴포넌트(variant/size 포함)로 교체. 클릭 핸들러 연결 동일 유지.

결과 영수증 이미지 캡처 및 표시 수정

Layer / File(s) Summary
ReceiptPaper 이미지 프록시 전환 및 shareReceiptImage 캡처 옵션 수정
apps/web/src/app/tournament/[id]/result/_components/ReceiptPaper.tsx, .../_utils/shareReceiptImage.ts
Image 컴포넌트 제거, toSameOriginImageUrl 헬퍼로 프록시 URL 생성 후 img + crossOrigin="anonymous" 사용. shareReceiptImageforce-cache/cors 옵션으로 전환.
GroupResultEntryCard ROOT 조건부 렌더링
apps/web/src/app/tournament/[id]/result/_components/ResultClient.tsx
tournamentData.isRoot인 경우에만 GroupResultEntryCard를 렌더링하고 sourceTournamentId 기반 매핑 로직 제거.

코드 포맷/순서 정리 (동작 변경 없음)

Layer / File(s) Summary
error.tsx, not-found.tsx, loginRedirect.ts 포맷 정리
apps/web/src/app/error.tsx, apps/web/src/app/not-found.tsx, apps/web/src/utils/loginRedirect.ts
className 클래스 순서 재정렬, 멀티라인 JSX 재구성, import 순서 교체 등 동작 변경 없는 코드 정리.

Sequence Diagram(s)

sequenceDiagram
    rect rgba(100, 149, 237, 0.5)
        Note over TournamentCreateClient: 담기 마감 감지 흐름
    end
    participant TournamentCreateClient
    participant DepositClosedDialog
    participant OwnerStartedDialog
    participant usePostTournamentStart

    TournamentCreateClient->>TournamentCreateClient: isOwner && !ownerStarted && isExpired 조건 충족
    TournamentCreateClient->>DepositClosedDialog: open=true (dismissed=false 시)
    DepositClosedDialog-->>TournamentCreateClient: onStart 호출
    TournamentCreateClient->>usePostTournamentStart: postTournamentStartMutation()
    DepositClosedDialog-->>TournamentCreateClient: onOpenChange(false) → dismissed=true

    rect rgba(144, 238, 144, 0.5)
        Note over TournamentCreateClient: 주최자 시작 감지 흐름
    end
    TournamentCreateClient->>TournamentCreateClient: ownerStarted false→true 전이 감지(useEffect+useRef)
    TournamentCreateClient->>OwnerStartedDialog: open=true (dismissed=false 시)
    OwnerStartedDialog-->>TournamentCreateClient: onStart 호출
    TournamentCreateClient->>usePostTournamentStart: postTournamentStartMutation()
    OwnerStartedDialog-->>TournamentCreateClient: onOpenChange(false) → dismissed=true
Loading
sequenceDiagram
    rect rgba(255, 165, 0, 0.5)
        Note over User,TournamentStartButton: 부전승 경고 흐름
    end
    participant User
    participant TournamentStartButton
    participant ByeWarningDialog
    participant ConfirmStartDialog

    User->>TournamentStartButton: 시작 버튼 클릭
    TournamentStartButton->>TournamentStartButton: isPowerOfTwo(count) 체크
    alt count가 2의 거듭제곱이 아닐 때
        TournamentStartButton->>ByeWarningDialog: isByeWarningOpen=true
        ByeWarningDialog-->>TournamentStartButton: onConfirm (handleByeWarningConfirm)
        TournamentStartButton->>TournamentStartButton: proceedAfterByeCheck()
    else 2의 거듭제곱일 때
        TournamentStartButton->>TournamentStartButton: proceedAfterByeCheck()
    end
    alt 주최자 && 친구 있음
        TournamentStartButton->>ConfirmStartDialog: isConfirmStartOpen=true
    else 참여자 또는 친구 없는 주최자
        TournamentStartButton->>TournamentStartButton: startTournamentMutation()
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • depromeet/PIKI-Client#167: TournamentCreateClient.tsxownerStarted 및 담기 마감 관련 시작 흐름을 동일하게 수정해 코드 레벨 변경이 직접 겹침.
  • depromeet/PIKI-Client#210: shareReceiptImage.tsshareReceiptImage 구현(toBlob 옵션)을 동일하게 수정하는 후속 변경.
  • depromeet/PIKI-Client#196: ReceiptPaper.tsxshareReceiptImage.ts의 영수증 캡처/공유 기능 구현을 함께 수정하는 관련 PR.

Suggested labels

fix, WEB

Suggested reviewers

  • kanghaeun

Poem

🐰 토끼가 코드 밭을 깡충깡충 뛰어다니며~
드래그는 이제 부드럽게, Z 포맷도 딱 맞게 🕐
마감 모달 짠! 시작 모달 짠! 부전승도 경고해~
영수증 이미지는 프록시로 뚝딱 캡처됐어요 🖼️
버그들아 안녕~ 토끼는 오늘도 행복해 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 21.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 주요 변경사항인 '토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정'을 명확하게 요약하며, raw_summary의 다양한 파일 변경사항들과 일치합니다.
Linked Issues check ✅ Passed 연결된 이슈 #236은 QA 통합 이슈로, 특정 페이지/기능에 국한되지 않고 일반적인 동작/UI/UX 문제를 트리아지하는 메타 추적 이슈입니다. PR의 변경사항들은 토너먼트 시작 흐름 모달, 영수증 캡처, 초대 마감 시간 처리 등 QA에서 발견된 다양한 버그 수정에 해당하므로 이슈의 의도와 부합합니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 토너먼트 시작 흐름(모달 추가), 영수증 캡처(이미지 처리), 초대 마감(시간 포맷 수정)과 관련된 QA 버그 수정 범위 내입니다. 클래스 순서 정렬이나 버튼 컴포넌트 교체 등도 관련 기능 개선의 일부로 범위 내 변경입니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/236-qa-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

🧹 Nitpick comments (2)
apps/web/src/app/tournament/[id]/create/_components/tournament-start-button/TournamentStartButton.tsx (1)

8-9: ⚡ Quick win

신규 import도 @/* 절대 경로 규칙으로 맞춰 주세요.

Line 8-9에서 ./ByeWarningDialog, ./ConfirmStartDialog를 상대 경로로 가져오고 있습니다.
현재 규칙 기준으로는 @/app/... alias import를 사용해야 합니다.

As per coding guidelines, apps/web/src/**/*.{ts,tsx}에서는 상대 경로 대신 @/* 절대 경로를 사용해야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/web/src/app/tournament/`[id]/create/_components/tournament-start-button/TournamentStartButton.tsx
around lines 8 - 9, The imports for ByeWarningDialog and ConfirmStartDialog in
TournamentStartButton.tsx are using relative paths (./ByeWarningDialog and
./ConfirmStartDialog) which violates the project's coding guideline that
requires all imports in apps/web/src files to use the `@/`* absolute path alias
instead. Replace both relative imports with their corresponding `@/app/`...
absolute paths to maintain consistency with the established import conventions.

Source: Coding guidelines

apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx (1)

16-20: ⚡ Quick win

상대 경로 import를 @/* 절대 경로로 통일해 주세요.

Line 16-20에서 새로 추가된 ..//./ 상대 경로 import가 규칙과 다릅니다. 이 파일도
@/app/... alias로 맞추는 편이 이동/리팩터링 내구성에 유리합니다.

As per coding guidelines, apps/web/src/**/*.{ts,tsx}에서는 상대 경로 대신 @/* 절대 경로를 사용해야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/web/src/app/tournament/`[id]/create/_components/TournamentCreateClient.tsx
around lines 16 - 20, Convert the relative path imports (using `../` and `./`)
in the TournamentCreateClient.tsx file to use the `@/` absolute path alias
instead. Replace all imports of usePostTournamentStart, useScrollToLast,
DepositClosedDialog, MemberJoinConfirmDialog, and OwnerStartedDialog with their
full absolute paths starting from `@/app/tournament/[id]/create/`. This ensures
consistency with the project's coding guidelines and improves maintainability
when files are moved or refactored.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web/src/app/not-found.tsx`:
- Around line 18-23: Remove the cursor-pointer class from the Link component
that has href={ROUTES.HOME} in the className prop, as Next.js Link elements
render as native anchor elements which already have the browser's default
pointer cursor. Keep all other classes in the className intact while removing
only the cursor-pointer portion.

In
`@apps/web/src/app/tournament/`[id]/create/_components/invite-friends/WheelColumn.tsx:
- Around line 123-149: The click blocking logic in handleItemMouseClick fails
because dragStateRef.current is set to null in handlePointerEnd before the click
event fires. Since pointerup precedes click in the event sequence, the state is
already null when handleItemMouseClick executes, making the state?.moved check
always falsy. Extract the moved flag into a separate ref (movedRef or similar)
that persists beyond dragStateRef being cleared. Update handlePointerEnd to set
this moved flag ref to true when dragging occurs, check this moved flag ref
instead of state?.moved in handleItemMouseClick, and then reset the moved flag
ref after handling the click to prevent future clicks from being incorrectly
blocked.

In
`@apps/web/src/app/tournament/`[id]/create/_components/TournamentCreateClient.tsx:
- Around line 100-107: The postTournamentStartMutation function in
handleStartFromDepositClosed and the similar handler around lines 130-134 lack
pending state guards, allowing rapid clicks to trigger duplicate mutation calls.
Add a guard condition checking if pending is falsy before calling
postTournamentStartMutation in both locations to ensure the mutation only
executes when no request is already in flight. This prevents duplicate
tournament start requests from being sent to the server.

---

Nitpick comments:
In
`@apps/web/src/app/tournament/`[id]/create/_components/tournament-start-button/TournamentStartButton.tsx:
- Around line 8-9: The imports for ByeWarningDialog and ConfirmStartDialog in
TournamentStartButton.tsx are using relative paths (./ByeWarningDialog and
./ConfirmStartDialog) which violates the project's coding guideline that
requires all imports in apps/web/src files to use the `@/`* absolute path alias
instead. Replace both relative imports with their corresponding `@/app/`...
absolute paths to maintain consistency with the established import conventions.

In
`@apps/web/src/app/tournament/`[id]/create/_components/TournamentCreateClient.tsx:
- Around line 16-20: Convert the relative path imports (using `../` and `./`) in
the TournamentCreateClient.tsx file to use the `@/` absolute path alias instead.
Replace all imports of usePostTournamentStart, useScrollToLast,
DepositClosedDialog, MemberJoinConfirmDialog, and OwnerStartedDialog with their
full absolute paths starting from `@/app/tournament/[id]/create/`. This ensures
consistency with the project's coding guidelines and improves maintainability
when files are moved or refactored.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1b4c1ee2-e53c-4ff1-8646-72440e0be7a8

📥 Commits

Reviewing files that changed from the base of the PR and between 7a5382a and e1226f9.

📒 Files selected for processing (19)
  • apps/web/src/app/error.tsx
  • apps/web/src/app/home/_components/CreateTournamentDialog.tsx
  • apps/web/src/app/home/_types/tournament.ts
  • apps/web/src/app/not-found.tsx
  • apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx
  • apps/web/src/app/tournament/[id]/create/_components/deposit-closed-dialog/DepositClosedDialog.tsx
  • apps/web/src/app/tournament/[id]/create/_components/invite-friends/InviteExpiresPicker.tsx
  • apps/web/src/app/tournament/[id]/create/_components/invite-friends/InviteFriendsDialog.tsx
  • apps/web/src/app/tournament/[id]/create/_components/invite-friends/WheelColumn.tsx
  • apps/web/src/app/tournament/[id]/create/_components/owner-started-dialog/OwnerStartedDialog.tsx
  • apps/web/src/app/tournament/[id]/create/_components/tournament-header/ConfirmExitDialog.tsx
  • apps/web/src/app/tournament/[id]/create/_components/tournament-start-button/ByeWarningDialog.tsx
  • apps/web/src/app/tournament/[id]/create/_components/tournament-start-button/ConfirmStartDialog.tsx
  • apps/web/src/app/tournament/[id]/create/_components/tournament-start-button/TournamentStartButton.tsx
  • apps/web/src/app/tournament/[id]/result/_components/ReceiptPaper.tsx
  • apps/web/src/app/tournament/[id]/result/_components/ResultClient.tsx
  • apps/web/src/app/tournament/[id]/result/_utils/shareReceiptImage.ts
  • apps/web/src/utils/formatDate.ts
  • apps/web/src/utils/loginRedirect.ts

Comment thread apps/web/src/app/not-found.tsx
Comment thread apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx Outdated
@ychany
ychany merged commit 23c150a into dev Jun 18, 2026
5 checks passed
@ychany
ychany deleted the fix/236-qa-fixes branch June 18, 2026 08:17
iOdiO89 pushed a commit that referenced this pull request Jun 19, 2026
* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)
iOdiO89 added a commit that referenced this pull request Jun 19, 2026
* feat: 홈에서 담는중, 플레이 상태인 토너먼트 카드만 보여주도록 수정

* refactor: UserProfileGroup에서 게스트 프로필 이미지 그대로 사용하도록 수정

* feat: Tournament Card 제목 클릭 시 토너먼트 준비/진행/결과 페이지로 이동

* fix: 화면 리사이즈 시 웹 스플래시 로고 한쪽으로 치우치는 오류 수정

* fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236) (#243)

* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영 (#245)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영

* style: 토너먼트 로딩 브라켓 아이콘 그림자 box-shadow로 변경

* style: 하단 바텀 내비 그라디언트 레이어 추가 (#247)

* style: 하단 바텀 내비 그라디언트 레이어 추가

* fix: 바텀 내비 그라디언트 포털 SSR 오류 수정 및 lint 에러 해결

* style: 토너먼트 준비 페이지 상태 라벨 주최자·참여자 디자인 통일 (#251)

* fix: 화면 확대 시 장바구니 크기 미복구 버그 수정 (#252)

* fix: 장바구니 8개 가득 찬 상태에서 아이템 삭제 시 장바구니 사라짐 버그 수정 (#254)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리 (#255)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리

* fix: SSE refresh 하드코딩 URL 상수로 교체 및 웹뷰 토큰 저장 누락 수정

* feat: 위시·토너먼트 아이템 수정 기능 개선 (#256)

* feat: 위시 Pending 상태일 때도 클릭 안 되도록 변경

* feat: item status Completed 인 경우에도 클릭 가능하도록 변경

* feat: item status Completed인 경우에 링크 갱신하는 drawer 추가

* feat: 위시, 토너먼트 아이템 Pending 상태일 때도 클릭 안 되도록 변경

* chore: 위시, 토너먼트 아이템 수정 문구 변경

* feat: 위시, 토너먼트 아이템 status = Ready인 경우 이미지 수정 불가능하도록 설정

* feat: 토너먼트 아이템 수정 기능 추가

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 위시 수정 페이지 스타일 변경

* feat: 링크로 토너먼트 등록 시 에러 토스트 추가

* feat: 토너먼트 아이템 수정 모든 필드 required로 변경

* feat: 위시 수정 모든 필드 required로 변경

* feat: 등록 성공한 위시 갱신 api 연결

* feat: 링크로 위시 등록 시 에러 토스트 추가

* chore: 불필요한 파일 제거

* fix: 토너먼트 아이템에 친구 프로필 얼굴 추가하도록 변경

* fix: 토너먼트 후보 Patch 누락된 에러 핸들링 추가

* refactor: 위시 수정 시 다른 액션 실행되지 않도록 설정

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* chore: 게스트 프로필 dice bear 처리 삭제

---------

Co-authored-by: 조영찬 <tigerbone@naver.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>
iOdiO89 pushed a commit that referenced this pull request Jun 19, 2026
* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)
iOdiO89 added a commit that referenced this pull request Jun 19, 2026
* feat: 홈에서 담는중, 플레이 상태인 토너먼트 카드만 보여주도록 수정

* refactor: UserProfileGroup에서 게스트 프로필 이미지 그대로 사용하도록 수정

* feat: Tournament Card 제목 클릭 시 토너먼트 준비/진행/결과 페이지로 이동

* fix: 화면 리사이즈 시 웹 스플래시 로고 한쪽으로 치우치는 오류 수정

* fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236) (#243)

* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영 (#245)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영

* style: 토너먼트 로딩 브라켓 아이콘 그림자 box-shadow로 변경

* style: 하단 바텀 내비 그라디언트 레이어 추가 (#247)

* style: 하단 바텀 내비 그라디언트 레이어 추가

* fix: 바텀 내비 그라디언트 포털 SSR 오류 수정 및 lint 에러 해결

* style: 토너먼트 준비 페이지 상태 라벨 주최자·참여자 디자인 통일 (#251)

* fix: 화면 확대 시 장바구니 크기 미복구 버그 수정 (#252)

* fix: 장바구니 8개 가득 찬 상태에서 아이템 삭제 시 장바구니 사라짐 버그 수정 (#254)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리 (#255)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리

* fix: SSE refresh 하드코딩 URL 상수로 교체 및 웹뷰 토큰 저장 누락 수정

* feat: 위시·토너먼트 아이템 수정 기능 개선 (#256)

* feat: 위시 Pending 상태일 때도 클릭 안 되도록 변경

* feat: item status Completed 인 경우에도 클릭 가능하도록 변경

* feat: item status Completed인 경우에 링크 갱신하는 drawer 추가

* feat: 위시, 토너먼트 아이템 Pending 상태일 때도 클릭 안 되도록 변경

* chore: 위시, 토너먼트 아이템 수정 문구 변경

* feat: 위시, 토너먼트 아이템 status = Ready인 경우 이미지 수정 불가능하도록 설정

* feat: 토너먼트 아이템 수정 기능 추가

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 위시 수정 페이지 스타일 변경

* feat: 링크로 토너먼트 등록 시 에러 토스트 추가

* feat: 토너먼트 아이템 수정 모든 필드 required로 변경

* feat: 위시 수정 모든 필드 required로 변경

* feat: 등록 성공한 위시 갱신 api 연결

* feat: 링크로 위시 등록 시 에러 토스트 추가

* chore: 불필요한 파일 제거

* fix: 토너먼트 아이템에 친구 프로필 얼굴 추가하도록 변경

* fix: 토너먼트 후보 Patch 누락된 에러 핸들링 추가

* refactor: 위시 수정 시 다른 액션 실행되지 않도록 설정

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* chore: 게스트 프로필 dice bear 처리 삭제

---------

Co-authored-by: 조영찬 <tigerbone@naver.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>
iOdiO89 added a commit that referenced this pull request Jun 23, 2026
* feat: 홈에서 담는중, 플레이 상태인 토너먼트 카드만 보여주도록 수정

* refactor: UserProfileGroup에서 게스트 프로필 이미지 그대로 사용하도록 수정

* feat: Tournament Card 제목 클릭 시 토너먼트 준비/진행/결과 페이지로 이동

* fix: 화면 리사이즈 시 웹 스플래시 로고 한쪽으로 치우치는 오류 수정

* fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236) (#243)

* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영 (#245)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영

* style: 토너먼트 로딩 브라켓 아이콘 그림자 box-shadow로 변경

* style: 하단 바텀 내비 그라디언트 레이어 추가 (#247)

* style: 하단 바텀 내비 그라디언트 레이어 추가

* fix: 바텀 내비 그라디언트 포털 SSR 오류 수정 및 lint 에러 해결

* style: 토너먼트 준비 페이지 상태 라벨 주최자·참여자 디자인 통일 (#251)

* fix: 화면 확대 시 장바구니 크기 미복구 버그 수정 (#252)

* fix: 장바구니 8개 가득 찬 상태에서 아이템 삭제 시 장바구니 사라짐 버그 수정 (#254)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리 (#255)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리

* fix: SSE refresh 하드코딩 URL 상수로 교체 및 웹뷰 토큰 저장 누락 수정

* feat: 위시·토너먼트 아이템 수정 기능 개선 (#256)

* feat: 위시 Pending 상태일 때도 클릭 안 되도록 변경

* feat: item status Completed 인 경우에도 클릭 가능하도록 변경

* feat: item status Completed인 경우에 링크 갱신하는 drawer 추가

* feat: 위시, 토너먼트 아이템 Pending 상태일 때도 클릭 안 되도록 변경

* chore: 위시, 토너먼트 아이템 수정 문구 변경

* feat: 위시, 토너먼트 아이템 status = Ready인 경우 이미지 수정 불가능하도록 설정

* feat: 토너먼트 아이템 수정 기능 추가

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 위시 수정 페이지 스타일 변경

* feat: 링크로 토너먼트 등록 시 에러 토스트 추가

* feat: 토너먼트 아이템 수정 모든 필드 required로 변경

* feat: 위시 수정 모든 필드 required로 변경

* feat: 등록 성공한 위시 갱신 api 연결

* feat: 링크로 위시 등록 시 에러 토스트 추가

* chore: 불필요한 파일 제거

* fix: 토너먼트 아이템에 친구 프로필 얼굴 추가하도록 변경

* fix: 토너먼트 후보 Patch 누락된 에러 핸들링 추가

* refactor: 위시 수정 시 다른 액션 실행되지 않도록 설정

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* chore: 게스트 프로필 dice bear 처리 삭제

---------

Co-authored-by: 조영찬 <tigerbone@naver.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>
iOdiO89 added a commit that referenced this pull request Jun 26, 2026
* feat: 위시 단일 삭제 시 삭제 성공 토스트 추가

* refactor: layout 권한 확인 시 fetchQuery 활용하여 다중 호출되지 않도록 방지

* feat: getMe 404인 경우 login 페이지로 redirect

* chore: 아카이브 페이지 props 네이밍 변경

* refactor: prefetch, getQueryState 대신 fetchQuery로 권한 검증 로직 단순화

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* style: 홈 토너먼트 목록 및 프로필 이미지 개선 (#265)

* feat: 홈에서 담는중, 플레이 상태인 토너먼트 카드만 보여주도록 수정

* refactor: UserProfileGroup에서 게스트 프로필 이미지 그대로 사용하도록 수정

* feat: Tournament Card 제목 클릭 시 토너먼트 준비/진행/결과 페이지로 이동

* fix: 화면 리사이즈 시 웹 스플래시 로고 한쪽으로 치우치는 오류 수정

* fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236) (#243)

* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영 (#245)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영

* style: 토너먼트 로딩 브라켓 아이콘 그림자 box-shadow로 변경

* style: 하단 바텀 내비 그라디언트 레이어 추가 (#247)

* style: 하단 바텀 내비 그라디언트 레이어 추가

* fix: 바텀 내비 그라디언트 포털 SSR 오류 수정 및 lint 에러 해결

* style: 토너먼트 준비 페이지 상태 라벨 주최자·참여자 디자인 통일 (#251)

* fix: 화면 확대 시 장바구니 크기 미복구 버그 수정 (#252)

* fix: 장바구니 8개 가득 찬 상태에서 아이템 삭제 시 장바구니 사라짐 버그 수정 (#254)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리 (#255)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리

* fix: SSE refresh 하드코딩 URL 상수로 교체 및 웹뷰 토큰 저장 누락 수정

* feat: 위시·토너먼트 아이템 수정 기능 개선 (#256)

* feat: 위시 Pending 상태일 때도 클릭 안 되도록 변경

* feat: item status Completed 인 경우에도 클릭 가능하도록 변경

* feat: item status Completed인 경우에 링크 갱신하는 drawer 추가

* feat: 위시, 토너먼트 아이템 Pending 상태일 때도 클릭 안 되도록 변경

* chore: 위시, 토너먼트 아이템 수정 문구 변경

* feat: 위시, 토너먼트 아이템 status = Ready인 경우 이미지 수정 불가능하도록 설정

* feat: 토너먼트 아이템 수정 기능 추가

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 위시 수정 페이지 스타일 변경

* feat: 링크로 토너먼트 등록 시 에러 토스트 추가

* feat: 토너먼트 아이템 수정 모든 필드 required로 변경

* feat: 위시 수정 모든 필드 required로 변경

* feat: 등록 성공한 위시 갱신 api 연결

* feat: 링크로 위시 등록 시 에러 토스트 추가

* chore: 불필요한 파일 제거

* fix: 토너먼트 아이템에 친구 프로필 얼굴 추가하도록 변경

* fix: 토너먼트 후보 Patch 누락된 에러 핸들링 추가

* refactor: 위시 수정 시 다른 액션 실행되지 않도록 설정

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* chore: 게스트 프로필 dice bear 처리 삭제

---------

Co-authored-by: 조영찬 <tigerbone@naver.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>

* feat: Firebase Analytics 연동 (앱 사용자 행동 분석) (#258)

* feat: Firebase Analytics (GA4) 연동 + 핵심 9개 이벤트 로깅

* feat: GA4 web stream 추가 (@next/third-parties) + 환경별 분기 로직

* fix: TOURNAMENT_COMPLETE 이벤트가 tournamentId 변경을 추적하도록 의존성 보강

* fix: firebase 패키지 버전 불일치로 인한 런타임 에러 가능성 제거

* feat: GA4 funnel 이벤트 보강 + iOS Analytics 빌드 fix (#268)

* fix: app.json 에 @react-native-firebase/analytics 플러그인 + forceStaticLinking 추가

* feat: GA4 이벤트 시안 기준 보강 (wish_add_start, social_invite_click, guest_visit 추가 + 이벤트명 정리)

* fix: 영수증 화면 상품 사진 미표시 및 긴 상품명 넘침 수정 (#271)

* fix: 영수증 상품 사진 미표시 수정 (_next/image 허용 width 사용)

* fix: 영수증 상품명 줄바꿈처리

* feat: 담기 마감 동작 개선 (협업 의도 판정 + 이어서 담기) (#272)

* feat: 담기 마감 모달에 '이어서 담기' 버튼 추가

* feat: 초대 보냈거나 친구 합류한 토너먼트만 담기 타이머 노출

* fix: refresh_token 동시 호출로 인한 자동 로그아웃 수정 (rotation 대응 dedupe) (#273)

* fix: SSE 의 refresh 가 별도 경로로 호출되어 race 발생하던 문제 수정 (#274)

* refactor: 홈 페이지 단위 await 제거 후 tournamentList 범위에만 await 설정

* refactor: WishCard 이미지 로딩 시 Skeleton 사용

* fix: BaseImage loading -> success로 전환되는 시점에 아무것도 뜨지 않는 현상 해결

* refactor: Archive 페이지 초기 페이지 진입 속도 개선

* refactor: UserProfile image 로딩 시 skeleton 적용

* chore: fix import error

* chore: 불필요한 eas 파일 삭제

* perf: wishcard 이미지 preload 최적화 및 LCP 지표 개선

* refactor: queryClient 캐싱 추가

* refactor: Button Spinner dynamic import 로 변경

* refactor: query client 캐시 스코프 변경

* chore: 아카이브/위시 - main 태그 하나만 사용하도록 변경

* fix: 아카이브, 마이페이지 처리되지 않은 에러는 throw되도록 처리

* chore: 위시 삭제 토스트 중복 제거

* refactor: 위시 수정 - layout으로 페이지 진입 권한 확인 분리

* fix: 토너먼트 Pick 뱃지 이미지보다 뒤에 뜨는 현상 제거

* fix: 토너먼트 준비 페이지 헤더 center text 잘림 현상 해결

* fix: 등록 실패한 위시도 삭제 가능하도록 버튼 추가

* fix: 앱 KeyboardAvoidingView 제거

* fix: 프로필 이미지 zindex 수정

* chore: 아카이브 페이지 main 태그 한개로 유지

* chore: 불필요한 403 에러 처리 삭제

* style: TournamentCard 텍스트 줄바꿈되는 경우 대응

* refactor: 위시 저장/삭제/수정 동시에 일어날 수 없도록 disabled 처리

---------

Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: 조영찬 <tigerbone@naver.com>
iOdiO89 added a commit that referenced this pull request Jul 19, 2026
* feat: 홈에서 담는중, 플레이 상태인 토너먼트 카드만 보여주도록 수정

* refactor: UserProfileGroup에서 게스트 프로필 이미지 그대로 사용하도록 수정

* feat: Tournament Card 제목 클릭 시 토너먼트 준비/진행/결과 페이지로 이동

* fix: 화면 리사이즈 시 웹 스플래시 로고 한쪽으로 치우치는 오류 수정

* fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236) (#243)

* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영 (#245)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영

* style: 토너먼트 로딩 브라켓 아이콘 그림자 box-shadow로 변경

* style: 하단 바텀 내비 그라디언트 레이어 추가 (#247)

* style: 하단 바텀 내비 그라디언트 레이어 추가

* fix: 바텀 내비 그라디언트 포털 SSR 오류 수정 및 lint 에러 해결

* style: 토너먼트 준비 페이지 상태 라벨 주최자·참여자 디자인 통일 (#251)

* fix: 화면 확대 시 장바구니 크기 미복구 버그 수정 (#252)

* fix: 장바구니 8개 가득 찬 상태에서 아이템 삭제 시 장바구니 사라짐 버그 수정 (#254)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리 (#255)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리

* fix: SSE refresh 하드코딩 URL 상수로 교체 및 웹뷰 토큰 저장 누락 수정

* feat: 위시·토너먼트 아이템 수정 기능 개선 (#256)

* feat: 위시 Pending 상태일 때도 클릭 안 되도록 변경

* feat: item status Completed 인 경우에도 클릭 가능하도록 변경

* feat: item status Completed인 경우에 링크 갱신하는 drawer 추가

* feat: 위시, 토너먼트 아이템 Pending 상태일 때도 클릭 안 되도록 변경

* chore: 위시, 토너먼트 아이템 수정 문구 변경

* feat: 위시, 토너먼트 아이템 status = Ready인 경우 이미지 수정 불가능하도록 설정

* feat: 토너먼트 아이템 수정 기능 추가

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 위시 수정 페이지 스타일 변경

* feat: 링크로 토너먼트 등록 시 에러 토스트 추가

* feat: 토너먼트 아이템 수정 모든 필드 required로 변경

* feat: 위시 수정 모든 필드 required로 변경

* feat: 등록 성공한 위시 갱신 api 연결

* feat: 링크로 위시 등록 시 에러 토스트 추가

* chore: 불필요한 파일 제거

* fix: 토너먼트 아이템에 친구 프로필 얼굴 추가하도록 변경

* fix: 토너먼트 후보 Patch 누락된 에러 핸들링 추가

* refactor: 위시 수정 시 다른 액션 실행되지 않도록 설정

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* chore: 게스트 프로필 dice bear 처리 삭제

---------

Co-authored-by: 조영찬 <tigerbone@naver.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>
iOdiO89 added a commit that referenced this pull request Jul 19, 2026
* feat: 위시 단일 삭제 시 삭제 성공 토스트 추가

* refactor: layout 권한 확인 시 fetchQuery 활용하여 다중 호출되지 않도록 방지

* feat: getMe 404인 경우 login 페이지로 redirect

* chore: 아카이브 페이지 props 네이밍 변경

* refactor: prefetch, getQueryState 대신 fetchQuery로 권한 검증 로직 단순화

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* style: 홈 토너먼트 목록 및 프로필 이미지 개선 (#265)

* feat: 홈에서 담는중, 플레이 상태인 토너먼트 카드만 보여주도록 수정

* refactor: UserProfileGroup에서 게스트 프로필 이미지 그대로 사용하도록 수정

* feat: Tournament Card 제목 클릭 시 토너먼트 준비/진행/결과 페이지로 이동

* fix: 화면 리사이즈 시 웹 스플래시 로고 한쪽으로 치우치는 오류 수정

* fix: QA 통합 — 토너먼트 시작 흐름 모달 / 영수증 캡처 / 초대 마감 보정 (#236) (#243)

* fix: 영수증 캡처 시 S3 이미지 CORS 차단 회피 (cacheBust false + force-cache)

* fix: 플레이 체험 게스트(CLONE)는 결과 페이지에서 전체 결과 보기 카드 숨김

* fix: 서버 ISO UTC 응답을 Z 떼지 않고 그대로 파싱 (만료됨 오표시 해결)

* fix: 초대 마감 시각 picker 가 ISO 8601 UTC 형식으로 전송하도록 변경

* fix: 휠 picker remount 방지 (key 에서 inviteExpiresAt 제거)

* chore: consolelog 삭제

* fix: 초대 마감 시 토너먼트 시작 버튼 비활성 처리

* fix: 영수증 캡처 시 상품 사진 누락 (next/image proxy URL 로 same-origin 우회)

* feat: 토너먼트 시작 전 부전승 안내 모달 추가 (2의 거듭제곱 아닌 경우)

* feat: 담기 시간 종료 시 주최자에게 자동 안내 모달 노출

* feat: 주최자 시작 SSE 신호 감지 → 참여자에게 자동 안내 모달 노출

* refactor: ConfirmStartDialog / ConfirmExitDialog 의 raw button → 공통 Button 컴포넌트 교체

* chore: format

* fix: react-hooks/set-state-in-effect lint 에러 해결 (이전 값 state 패턴으로 변경)

* style: not-found 페이지 Link 의 cursor-pointer 제거 및 canonical class 정리

* fix: 휠 picker 드래그 직후 click 이벤트가 잘못된 점프를 일으키던 문제 수정

* fix: 모달 시작 버튼 중복 mutation 호출 방지 (isPending 가드 + disabled)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영 (#245)

* style: 위시에서 가져오기 CTA 영역 그라데이션 디자인 반영

* style: 토너먼트 로딩 브라켓 아이콘 그림자 box-shadow로 변경

* style: 하단 바텀 내비 그라디언트 레이어 추가 (#247)

* style: 하단 바텀 내비 그라디언트 레이어 추가

* fix: 바텀 내비 그라디언트 포털 SSR 오류 수정 및 lint 에러 해결

* style: 토너먼트 준비 페이지 상태 라벨 주최자·참여자 디자인 통일 (#251)

* fix: 화면 확대 시 장바구니 크기 미복구 버그 수정 (#252)

* fix: 장바구니 8개 가득 찬 상태에서 아이템 삭제 시 장바구니 사라짐 버그 수정 (#254)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리 (#255)

* fix: SSE 알림 구독 토큰 만료 시 재연결 처리

* fix: SSE refresh 하드코딩 URL 상수로 교체 및 웹뷰 토큰 저장 누락 수정

* feat: 위시·토너먼트 아이템 수정 기능 개선 (#256)

* feat: 위시 Pending 상태일 때도 클릭 안 되도록 변경

* feat: item status Completed 인 경우에도 클릭 가능하도록 변경

* feat: item status Completed인 경우에 링크 갱신하는 drawer 추가

* feat: 위시, 토너먼트 아이템 Pending 상태일 때도 클릭 안 되도록 변경

* chore: 위시, 토너먼트 아이템 수정 문구 변경

* feat: 위시, 토너먼트 아이템 status = Ready인 경우 이미지 수정 불가능하도록 설정

* feat: 토너먼트 아이템 수정 기능 추가

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 토너먼트 아이템 수정 페이지 bg color 고정

* style: 위시 수정 페이지 스타일 변경

* feat: 링크로 토너먼트 등록 시 에러 토스트 추가

* feat: 토너먼트 아이템 수정 모든 필드 required로 변경

* feat: 위시 수정 모든 필드 required로 변경

* feat: 등록 성공한 위시 갱신 api 연결

* feat: 링크로 위시 등록 시 에러 토스트 추가

* chore: 불필요한 파일 제거

* fix: 토너먼트 아이템에 친구 프로필 얼굴 추가하도록 변경

* fix: 토너먼트 후보 Patch 누락된 에러 핸들링 추가

* refactor: 위시 수정 시 다른 액션 실행되지 않도록 설정

* style: 토너먼트 담기 화면 레이아웃 및 UI 개선 (#259)

* style: layout.tsx에서 불필요한 padding 제거

* style: 참여자 프로필 그룹 z-index 순서 수정

* style: 장바구니와 상태 라벨 사이 여백 조정

* style: 캐러셀 슬라이드 크기 비율 85%에서 90%로 변경

* feat: 토너먼트 헤더에서 뒤로가기 버튼 클릭 시 홈으로 이동하도록 수정

* feat: 장바구니 아이템 수 증가 시 알림 토스트 추가

* feat: 위시 상품 삭제 토스트 추가 및 복구 필드명 수정 (#263)

* fix: 위시 복구 요청 폼 필드명 수정 (price → currentPrice)

* feat: 위시 삭제 시 성공 토스트 메시지 추가

* fix: 애플 로그인 시 비회원으로 로그인되는 문제 수정 (#242)

* fix: Apple OAuth POST 콜백을 올바른 핸들러로 rewrite하는 미들웨어 추가

* fix: Apple OAuth POST 콜백을 proxy.ts에서 올바른 핸들러로 rewrite

* fix: 로그인 상태에서 /login 접근 시 /home으로 리다이렉트

* fix: Apple OAuth POST 콜백 rewrite를 307 redirect로 변경

* fix: Apple 콜백 route.ts 디버그 로그 추가

* fix: Apple 콜백 실패 시 에러 정보를 URL 파라미터로 전달

* fix: Apple 콜백 성공 시 307 대신 302로 리다이렉트하여 POST 루프 방지

* fix: Apple 콜백 쿠키 SameSite=Strict → Lax로 변경하여 cross-site 리다이렉트 후 인증 유지

* chore: Apple 콜백 디버그 코드 제거

* fix: 탈퇴 후 무한루프 유발하는 /login → /home 리다이렉트 제거

* fix: 애플 콜백 쿠키 SameSite 변환 코드 제거 (서버에서 Lax로 일괄 변경)

* refactor: 애플 콜백 처리 BE 이관으로 FE route.ts 및 proxy Apple POST 감지 코드 제거

* fix: 애플 로그인 redirectUri를 BE 콜백 URL로 변경

* fix: Apple getAuthUrl 호출 시 redirectUri 파라미터 제거 (BE 브릿지 URL 사용)

* fix: no-undefined lint 에러 수정

* fix: Apple redirectUri URL 조합 안전하게 수정

* fix: 토너먼트 준비 화면 실시간 아이템 상태 미반영 버그 수정  (#264)

* feat: tournament-item-parsed SSE 이벤트 처리 추가

* feat: 토너먼트 아이템 삭제 시 참여자 화면 실시간 갱신 처리 추가

* chore: 토너먼트 조회 30초 폴링 제거 (SSE로 대체)

* chore: 게스트 프로필 dice bear 처리 삭제

---------

Co-authored-by: 조영찬 <tigerbone@naver.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>

* feat: Firebase Analytics 연동 (앱 사용자 행동 분석) (#258)

* feat: Firebase Analytics (GA4) 연동 + 핵심 9개 이벤트 로깅

* feat: GA4 web stream 추가 (@next/third-parties) + 환경별 분기 로직

* fix: TOURNAMENT_COMPLETE 이벤트가 tournamentId 변경을 추적하도록 의존성 보강

* fix: firebase 패키지 버전 불일치로 인한 런타임 에러 가능성 제거

* feat: GA4 funnel 이벤트 보강 + iOS Analytics 빌드 fix (#268)

* fix: app.json 에 @react-native-firebase/analytics 플러그인 + forceStaticLinking 추가

* feat: GA4 이벤트 시안 기준 보강 (wish_add_start, social_invite_click, guest_visit 추가 + 이벤트명 정리)

* fix: 영수증 화면 상품 사진 미표시 및 긴 상품명 넘침 수정 (#271)

* fix: 영수증 상품 사진 미표시 수정 (_next/image 허용 width 사용)

* fix: 영수증 상품명 줄바꿈처리

* feat: 담기 마감 동작 개선 (협업 의도 판정 + 이어서 담기) (#272)

* feat: 담기 마감 모달에 '이어서 담기' 버튼 추가

* feat: 초대 보냈거나 친구 합류한 토너먼트만 담기 타이머 노출

* fix: refresh_token 동시 호출로 인한 자동 로그아웃 수정 (rotation 대응 dedupe) (#273)

* fix: SSE 의 refresh 가 별도 경로로 호출되어 race 발생하던 문제 수정 (#274)

* refactor: 홈 페이지 단위 await 제거 후 tournamentList 범위에만 await 설정

* refactor: WishCard 이미지 로딩 시 Skeleton 사용

* fix: BaseImage loading -> success로 전환되는 시점에 아무것도 뜨지 않는 현상 해결

* refactor: Archive 페이지 초기 페이지 진입 속도 개선

* refactor: UserProfile image 로딩 시 skeleton 적용

* chore: fix import error

* chore: 불필요한 eas 파일 삭제

* perf: wishcard 이미지 preload 최적화 및 LCP 지표 개선

* refactor: queryClient 캐싱 추가

* refactor: Button Spinner dynamic import 로 변경

* refactor: query client 캐시 스코프 변경

* chore: 아카이브/위시 - main 태그 하나만 사용하도록 변경

* fix: 아카이브, 마이페이지 처리되지 않은 에러는 throw되도록 처리

* chore: 위시 삭제 토스트 중복 제거

* refactor: 위시 수정 - layout으로 페이지 진입 권한 확인 분리

* fix: 토너먼트 Pick 뱃지 이미지보다 뒤에 뜨는 현상 제거

* fix: 토너먼트 준비 페이지 헤더 center text 잘림 현상 해결

* fix: 등록 실패한 위시도 삭제 가능하도록 버튼 추가

* fix: 앱 KeyboardAvoidingView 제거

* fix: 프로필 이미지 zindex 수정

* chore: 아카이브 페이지 main 태그 한개로 유지

* chore: 불필요한 403 에러 처리 삭제

* style: TournamentCard 텍스트 줄바꿈되는 경우 대응

* refactor: 위시 저장/삭제/수정 동시에 일어날 수 없도록 disabled 처리

---------

Co-authored-by: kanghaeun <145974230+kanghaeun@users.noreply.github.com>
Co-authored-by: Soyeong Park <mb535622@gmail.com>
Co-authored-by: 조영찬 <tigerbone@naver.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QA] WEB - 진행 통합 이슈 (0618)

1 participant