Skip to content

feat: 초대 링크 합류 플로우 개선#220

Merged
ychany merged 13 commits into
devfrom
feat/207-join-link-nickname
Jun 17, 2026
Merged

feat: 초대 링크 합류 플로우 개선#220
ychany merged 13 commits into
devfrom
feat/207-join-link-nickname

Conversation

@iOdiO89

@iOdiO89 iOdiO89 commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

작업 요약

  • 회원/비회원의 초대 합류 분기 처리
  • 비회원 초대 합류 시 닉네임 설정 기능 추가

작업 내용

초대 링크 진입 플로우

  • 게스트: /invite/{id}?code= 검증 후 join 미리보기에서 닉네임 설정 및 참여
  • 멤버: join 미리보기 생략 → postJoin/tournament/{id}/create?action=welcome-join으로 바로 이동
  • useQueryAction + welcome-join 쿼리로 합류 후 WelcomeJoinDialog 바텀시트 노출
  • 멤버/게스트에 따라 WelcomeJoinDialog UI 분기 (멤버: 토너먼트 정보 카드 포함)

에러 처리

  • TournamentErrorDialog 공통 컴포넌트 추출
  • 초대 코드 만료(409) 시 LINK_EXPIRED 타입 다이얼로그 표시
    • 홈 초대 코드 다이얼로그 (InviteCodeDialog)
    • 초대 링크 페이지 (InviteClient)
    • join 미리보기 참여하기 (JoinPreviewClient)

인증 / 라우팅

  • /invite 경로 MEMBER_AND_GUEST 등록 → 비로그인 초대 링크 접근 시 proxy 자동 게스트 로그인
  • 게스트 로그인 성공 후 sessionStorage에 저장된 redirect 경로로 이동
  • token refresh API endpoint 수정 및 X-Client-Type 헤더 추가

리팩토링

  • 닉네임 중복 검사 useNicknameValidation 훅 공통화 (join 미리보기, 마이페이지 수정)
  • 마이페이지 전용 닉네임 체크 API/훅 제거 → src/apis, src/hooks 공통 모듈 사용
  • postJoin API 및 usePostJoin 훅 추가 (게스트/회원 공통 참여)

스크린샷

2026-06-17.12.38.59.mov
스크린샷 2026-06-17 오전 12 30 55

연관 이슈

close #207

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • 토너먼트 초대 링크 참여 시 만료/진행 중/충돌 등 상황에 맞는 오류 다이얼로그 제공
  • 버그 수정
    • 게스트 로그인 후 올바른 페이지로 리디렉션되도록 수정
  • 개선
    • 닉네임 중복 체크/검증 UX 개선(오류 메시지 정교화, 조회 흐름 단순화)
    • 인증 토큰 갱신 처리 안정화

@vercel

vercel Bot commented Jun 16, 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 17, 2026 4:15am

@github-actions
github-actions Bot requested review from soyeong0115 and ychany June 16, 2026 15:47
@github-actions

Copy link
Copy Markdown

No description provided.

@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0e125127-1984-4f7e-a5dc-33b30af26b8e

📥 Commits

Reviewing files that changed from the base of the PR and between f45a8ff and 81a4b17.

📒 Files selected for processing (2)
  • apps/web/src/app/home/_components/invite-code-dialog/InviteCodeDialog.tsx
  • apps/web/src/app/invite/[id]/_components/InviteClient.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • apps/web/src/app/home/_components/invite-code-dialog/InviteCodeDialog.tsx
  • apps/web/src/app/invite/[id]/_components/InviteClient.tsx

Walkthrough

초대 링크/코드 참여 흐름을 게스트 기반에서 인증 사용자(MEMBER/게스트) 기반으로 전환한다. postJoin API 및 훅 신규 추가, TournamentErrorDialog 컴포넌트 추가, 닉네임 검증 훅 리팩터링, 세션 스토리지 기반 환영 페이로드 제거, 엔드포인트/라우트 상수 정비가 포함된다.

Changes

초대 참여 흐름 전환 및 에러 처리

Layer / File(s) Summary
공유 상수 및 라우트 정비
apps/web/src/consts/api.ts, apps/web/src/consts/route.ts, apps/web/src/consts/queryAction.ts, apps/web/src/utils/getRouteType.ts, apps/web/src/apis/getNicknameCheck.ts, apps/web/src/apis/client.ts
ENDPOINTS 사용자 키를 USERS_*에서 USER_*로 변경, ROUTESINVITE_BASE/INVITE_BY_LINK 추가, QUERY_ACTION.VALUEWELCOME_JOIN 추가, 초대 경로를 MEMBER_AND_GUEST로 분류 확장. 401 토큰 갱신 요청에 X-Client-Type 헤더 추가.
닉네임 검증 훅 리팩터링 및 mypage 로컬 코드 제거
apps/web/src/hooks/useGetNicknameCheck.ts, apps/web/src/hooks/useNicknameValidation.ts, apps/web/src/app/mypage/edit/_apis/getNicknameCheck.ts, apps/web/src/app/mypage/edit/_hooks/useGetNicknameCheck.ts, apps/web/src/app/mypage/edit/_hooks/usePatchMe.ts, apps/web/src/app/mypage/edit/_components/EditForm.tsx
전역 useGetNicknameCheckuseDebounce+enabled 기반으로 재구성하고 반환값 확장. useNicknameValidation에서 디바운스 제거 및 고정 에러 메시지 적용. mypage 로컬 중복 구현 삭제. usePatchMe에서 라우터 로직 분리, EditForm에서 onSuccess 라우팅 적용.
TournamentErrorDialog 신규 추가
apps/web/src/components/tournament-error-dialog/index.tsx
오류 타입(NO_WISH_EXISTS, ALREADY_STARTED, ALREADY_ENDED, LINK_EXPIRED, REQUEST_FAILED)별 아이콘/제목/설명/버튼을 CONTENT 매핑으로 정의하고 Dialog+DialogClose 기반으로 렌더링하는 컴포넌트 신규 추가.
postJoin API·훅 추가 및 joinSession 정리
apps/web/src/app/tournament/join/_apis/postJoin.ts, apps/web/src/app/tournament/join/_hooks/usePostJoin.ts, apps/web/src/app/tournament/join/_utils/joinSession.ts
postJoin API 래퍼 및 usePostJoin useMutation 훅 신규 추가. joinSession에서 joinWelcome 관련 타입/함수(setJoinWelcome, consumeJoinWelcomeFor) 제거.
JoinPreviewClient: 게스트→인증 사용자 조인 흐름 전환
apps/web/src/app/tournament/join/[id]/_components/JoinPreviewClient.tsx, apps/web/src/app/tournament/join/[id]/page.tsx, apps/web/src/app/tournament/[id]/create/page.tsx
의존성을 useGetMe, useNicknameValidation, usePatchMe, usePostJoin으로 교체. handleConfirm에서 닉네임 변경 시 patchMe 성공 후 joinTournament 연쇄 호출. 409 에러 시 TournamentErrorDialog 표시. 조인·생성 페이지에 서버 사이드 getMe 프리페치 추가.
InviteClient: MEMBER 자동 참여 및 409 에러 분기
apps/web/src/app/invite/[id]/_components/InviteClient.tsx
MEMBER identityType이면 postJoinWELCOME_JOIN 쿼리와 함께 생성 화면으로 리다이렉트. 409 응답에서 TournamentErrorDialog 표시로 분기. 로딩/invalid UI에 TournamentErrorDialog 렌더링 포함.
InviteCodeDialog: 400/409 에러 다이얼로그 분기
apps/web/src/app/home/_components/invite-code-dialog/InviteCodeDialog.tsx
400→InvalidCodeDialog, 409→TournamentErrorDialog(LINK_EXPIRED)로 HTTP 상태별 분기 처리 추가. isTournamentErrorDialogOpen 상태 및 렌더링 추가.
WelcomeJoinDialog: userIdentityType 분기 및 props 재구성
apps/web/src/app/tournament/[id]/create/_components/welcome-join-dialog/WelcomeJoinDialog.tsx, apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx
WelcomeJoinDialogProps에서 profileType 제거, userIdentityType/profileImage/tournamentName/itemCount/participantCount 추가. MEMBER/비-MEMBER 분기 렌더링. TournamentCreateClient에서 welcomePayload 상태를 useQueryAction(WELCOME_JOIN)+useGetMe 기반으로 전환.
게스트 로그인 리다이렉트 경로 수정
apps/web/src/app/login/_components/LoginButtons.tsx, apps/web/src/app/login/_hooks/usePostGuestLogin.ts
handleGuestLogin에서 setLoginRedirectPath(validRedirect) 선행 호출 추가. 게스트 로그인 성공 후 ROUTES.HOME 대신 getLoginRedirectPath() 결과로 라우팅 변경.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant InviteClient
  participant JoinPreviewClient
  participant usePatchMe
  participant usePostJoin
  participant TournamentErrorDialog

  User->>InviteClient: 초대 링크 접근
  InviteClient->>InviteClient: getInvitePreviewByCode()
  alt 409 에러
    InviteClient->>TournamentErrorDialog: LINK_EXPIRED 표시
  else MEMBER identityType
    InviteClient->>usePostJoin: postJoin() 직접 호출
    usePostJoin-->>InviteClient: 성공 → WELCOME_JOIN 쿼리 포함 생성 화면으로 이동
  else 게스트 또는 비회원
    InviteClient->>JoinPreviewClient: 닉네임 입력 화면으로 이동
    User->>JoinPreviewClient: 닉네임 입력 후 확인
    alt 닉네임 변경 있음
      JoinPreviewClient->>usePatchMe: patchMeMutation
      usePatchMe-->>JoinPreviewClient: onSuccess
    end
    JoinPreviewClient->>usePostJoin: joinTournament()
    alt 409 에러
      usePostJoin-->>TournamentErrorDialog: LINK_EXPIRED 표시
    else 성공
      usePostJoin-->>JoinPreviewClient: WELCOME_JOIN 쿼리 포함 라우팅
    end
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • depromeet/PIKI-Client#135: apps/web/src/consts/queryAction.tsQUERY_ACTION.VALUEWELCOME_JOIN을 추가하고 이를 useQueryAction 기반으로 사용한 점에서, 검색된 PR이 QUERY_ACTION/useQueryAction를 도입해 확장 가능한 구조를 만든 변경과 직접 맞물립니다.
  • depromeet/PIKI-Client#148: apps/web/src/consts/route.ts에서 ROUTES 상수에 INVITE_BASE/INVITE_BY_LINK를 추가하는 변경이 검색된 PR의 광범위한 "하드코딩된 경로 대신 ROUTES 상수 사용" 리팩터링의 연장선입니다.
  • depromeet/PIKI-Client#161: apps/web/src/apis/client.ts의 401 토큰 갱신(Axios refresh) 로직에서 갱신 엔드포인트 호출 방식과 X-Client-Type 헤더 추가가 검색된 PR의 동일 코드 경로 수정과 관련이 있습니다.

Suggested reviewers

  • kanghaeun
  • soyeong0115
  • ychany

Poem

🐇 토끼가 초대장을 들고 깡충!
409면 "링크 만료됐어요" 다이얼로그 짜잔
닉네임 고쳐 PATCH, 참여 POST 쾅~
welcomePayload는 세션에서 쿼리로 탈바꿈
게스트도 멤버도 모두 환영해요 🎉

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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의 주요 변경 사항(초대 링크 합류 플로우 개선)을 명확하게 요약하며, 실제 구현 내용과 일치합니다.
Linked Issues check ✅ Passed PR은 #207 이슈의 모든 주요 코딩 요구사항을 충족합니다: proxy 자동 게스트 로그인 확인(라우트 분류, MEMBER_AND_GUEST 설정), 하드코딩된 닉네임 제거, PATCH API 연동, inviteCode 처리, postJoin API 추가 등이 모두 구현되었습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 초대 링크 합류 플로우 개선과 관련되어 있으며, 닉네임 검증 훅 공유, TournamentErrorDialog 추가, 토큰 갱신 API 수정, 엔드포인트 네이밍 통일 등은 모두 이 플로우를 지원하는 필수 변경입니다.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/207-join-link-nickname

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.

@github-actions github-actions Bot added the feature New feature or request label Jun 16, 2026

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/src/app/tournament/join/[id]/page.tsx (1)

18-39: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

초대 코드 필수 계약이 클라이언트에서 보장되지 않습니다.

code가 없는 경우에도 조인 화면이 열리고, 실제 join 요청 본문에서도 inviteCode가 생략될 수 있습니다. 초대 링크 기반 참여 플로우 계약이 깨져 400 실패/오동작으로 이어질 수 있어요.

  • apps/web/src/app/tournament/join/[id]/page.tsx#L18-L39: code가 없거나 공백이면 즉시 차단(notFound() 또는 에러 경로)하고, JoinPreviewClient에는 유효한 코드만 전달하세요.
  • apps/web/src/app/tournament/join/[id]/_components/JoinPreviewClient.tsx#L56-L61: body의 조건부 spread를 제거하고 inviteCode를 항상 포함해 전송하도록 고정하세요.
🤖 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/join/`[id]/page.tsx around lines 18 - 39, The
invite code validation is incomplete and breaks the invite-link-based join flow
contract. In the page.tsx file at the searchParams destructuring and code
validation section, add a check to ensure `code` exists and is not empty before
passing it to JoinPreviewClient—call notFound() if the code is missing or blank
to prevent opening the join screen without a valid invite code. In the
JoinPreviewClient.tsx file at the request body construction around lines 56-61,
remove any conditional spread or optional inclusion of inviteCode and ensure
inviteCode is always included in the request body to prevent omitting it on the
join request.
🧹 Nitpick comments (3)
apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx (1)

13-13: ⚡ Quick win

import 규칙을 가이드라인에 맞게 분리해 주세요.

Line 13은 type/value 혼합 import와 상대경로 import를 함께 사용하고 있어, import type 분리 규칙과 @/* 절대 경로 규칙을 동시에 위반합니다.

As per coding guidelines, "Use import type for type-only imports; disallow mixing type and value imports" 및 "Use absolute path alias @/* for imports instead of relative paths"를 따라야 합니다.

제안 수정안
-import { type JoinConfirmPayloadT, consumeJoinConfirmFor } from '../../../join/_utils/joinSession';
+import { consumeJoinConfirmFor } from '`@/app/tournament/join/_utils/joinSession`';
+import type { JoinConfirmPayloadT } from '`@/app/tournament/join/_utils/joinSession`';
🤖 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
at line 13, The import statement on line 13 mixes type and value imports in
violation of the type-only import separation rule, and uses a relative path
instead of the absolute path alias. Split the single import statement into two
separate imports: one using `import type` for the JoinConfirmPayloadT type
import, and another for the consumeJoinConfirmFor value import. Additionally,
replace the relative path `../../../join/_utils/joinSession` with the
corresponding absolute path using the `@/*` alias to comply with the absolute
path import rule.

Source: Coding guidelines

apps/web/src/components/tournament-error-dialog/index.tsx (2)

5-12: ⚡ Quick win

apps/web/src 규칙과 다르게 상대 경로 import를 사용하고 있습니다.

이 파일은 apps/web/src 하위라서 상대 경로 대신 @/* 별칭 import로 맞추는 게 좋습니다.

제안 수정안
 import { FireIconFill, HistoryIconFill, SadIconFill, WarningIconFill } from '`@/assets/icons`';
 import ButtonLink from '`@/components/button/ButtonLink`';
+import {
+  Dialog,
+  DialogClose,
+  DialogContent,
+  DialogDescription,
+  DialogFooter,
+  DialogTitle,
+} from '`@/components/dialog`';
 import { ROUTES } from '`@/consts/route`';
-
-import {
-  Dialog,
-  DialogClose,
-  DialogContent,
-  DialogDescription,
-  DialogFooter,
-  DialogTitle,
-} from '../dialog';

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/components/tournament-error-dialog/index.tsx` around lines 5 -
12, The import statement in tournament-error-dialog/index.tsx is using a
relative path import from '../dialog' which violates the coding guidelines for
apps/web/src. Replace the relative path import with the `@/`* alias import
pattern. Change the import statement to use `@/components/dialog` (or the
appropriate absolute path alias) instead of the relative '../dialog' path to
align with the project's import standards.

Source: Coding guidelines


14-18: ⚡ Quick win

Props 타입명을 컴포넌트명 기준으로 맞춰주세요.

Props 대신 TournamentErrorDialogProps로 선언하면 현재 저장소 규칙과 일치합니다.

제안 수정안
-type Props = {
+type TournamentErrorDialogProps = {
   type: 'NO_WISH_EXISTS' | 'ALREADY_STARTED' | 'ALREADY_ENDED' | 'LINK_EXPIRED' | 'REQUEST_FAILED';
   open: boolean;
   onOpenChange: (open: boolean) => void;
 };
 
-function TournamentErrorDialog({ type, open, onOpenChange }: Props) {
+function TournamentErrorDialog({ type, open, onOpenChange }: TournamentErrorDialogProps) {

As per coding guidelines, React 컴포넌트 props 타입은 {ComponentName}Props 패턴을 사용해야 합니다.

Also applies to: 58-58

🤖 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/components/tournament-error-dialog/index.tsx` around lines 14 -
18, The Props type declaration does not follow the repository's naming
convention for component props types. Rename the `Props` type to
`TournamentErrorDialogProps` to match the pattern of {ComponentName}Props used
throughout the codebase. Update this type name both at its declaration (around
lines 14-18) and wherever it is used in the file, including line 58 where it
appears to be referenced in the component function signature.

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/home/_components/invite-code-dialog/InviteCodeDialog.tsx`:
- Line 59: In the InviteCodeDialog component, the error handling for the
fallback case is missing a parent dialog closure. When
`setIsInvalidDialogOpen(true)` is called to open the InvalidCodeDialog, the
parent dialog should also be closed via `onOpenChange(false)` to match the
behavior of the 400/409 error branches. Add the `onOpenChange(false)` call
before `setIsInvalidDialogOpen(true)` to ensure consistent modal state
management across all error scenarios.

In `@apps/web/src/app/invite/`[id]/_components/InviteClient.tsx:
- Around line 47-50: The issue is that when a 409 error is caught and the
tournament error dialog is opened, the loading state is not updated, causing the
loading spinner to remain visible indefinitely. In the InviteClient.tsx file at
lines 47-50 (anchor), after calling setIsTournamentErrorDialogOpen(true), you
must also update the loading state variable to exit the 'loading' state
(typically set it to 'idle' or similar). The same fix must be applied to the
sibling location at lines 79-82 in the same file. Both 409 error handling
branches need the state transition added to prevent the UI from appearing stuck.

---

Outside diff comments:
In `@apps/web/src/app/tournament/join/`[id]/page.tsx:
- Around line 18-39: The invite code validation is incomplete and breaks the
invite-link-based join flow contract. In the page.tsx file at the searchParams
destructuring and code validation section, add a check to ensure `code` exists
and is not empty before passing it to JoinPreviewClient—call notFound() if the
code is missing or blank to prevent opening the join screen without a valid
invite code. In the JoinPreviewClient.tsx file at the request body construction
around lines 56-61, remove any conditional spread or optional inclusion of
inviteCode and ensure inviteCode is always included in the request body to
prevent omitting it on the join request.

---

Nitpick comments:
In
`@apps/web/src/app/tournament/`[id]/create/_components/TournamentCreateClient.tsx:
- Line 13: The import statement on line 13 mixes type and value imports in
violation of the type-only import separation rule, and uses a relative path
instead of the absolute path alias. Split the single import statement into two
separate imports: one using `import type` for the JoinConfirmPayloadT type
import, and another for the consumeJoinConfirmFor value import. Additionally,
replace the relative path `../../../join/_utils/joinSession` with the
corresponding absolute path using the `@/*` alias to comply with the absolute
path import rule.

In `@apps/web/src/components/tournament-error-dialog/index.tsx`:
- Around line 5-12: The import statement in tournament-error-dialog/index.tsx is
using a relative path import from '../dialog' which violates the coding
guidelines for apps/web/src. Replace the relative path import with the `@/`* alias
import pattern. Change the import statement to use `@/components/dialog` (or the
appropriate absolute path alias) instead of the relative '../dialog' path to
align with the project's import standards.
- Around line 14-18: The Props type declaration does not follow the repository's
naming convention for component props types. Rename the `Props` type to
`TournamentErrorDialogProps` to match the pattern of {ComponentName}Props used
throughout the codebase. Update this type name both at its declaration (around
lines 14-18) and wherever it is used in the file, including line 58 where it
appears to be referenced in the component function signature.
🪄 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: 419e912d-82df-4722-bec8-e2dfde7a6e27

📥 Commits

Reviewing files that changed from the base of the PR and between aef6951 and f45a8ff.

📒 Files selected for processing (25)
  • apps/web/src/apis/client.ts
  • apps/web/src/apis/getNicknameCheck.ts
  • apps/web/src/app/home/_components/invite-code-dialog/InviteCodeDialog.tsx
  • apps/web/src/app/invite/[id]/_components/InviteClient.tsx
  • apps/web/src/app/login/_components/LoginButtons.tsx
  • apps/web/src/app/login/_hooks/usePostGuestLogin.ts
  • apps/web/src/app/mypage/edit/_apis/getNicknameCheck.ts
  • apps/web/src/app/mypage/edit/_components/EditForm.tsx
  • apps/web/src/app/mypage/edit/_hooks/useGetNicknameCheck.ts
  • apps/web/src/app/mypage/edit/_hooks/usePatchMe.ts
  • apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx
  • apps/web/src/app/tournament/[id]/create/_components/welcome-join-dialog/WelcomeJoinDialog.tsx
  • apps/web/src/app/tournament/[id]/create/page.tsx
  • apps/web/src/app/tournament/join/[id]/_components/JoinPreviewClient.tsx
  • apps/web/src/app/tournament/join/[id]/page.tsx
  • apps/web/src/app/tournament/join/_apis/postJoin.ts
  • apps/web/src/app/tournament/join/_hooks/usePostJoin.ts
  • apps/web/src/app/tournament/join/_utils/joinSession.ts
  • apps/web/src/components/tournament-error-dialog/index.tsx
  • apps/web/src/consts/api.ts
  • apps/web/src/consts/queryAction.ts
  • apps/web/src/consts/route.ts
  • apps/web/src/hooks/useGetNicknameCheck.ts
  • apps/web/src/hooks/useNicknameValidation.ts
  • apps/web/src/utils/getRouteType.ts
💤 Files with no reviewable changes (5)
  • apps/web/src/app/tournament/join/_utils/joinSession.ts
  • apps/web/src/app/mypage/edit/_hooks/useGetNicknameCheck.ts
  • apps/web/src/app/mypage/edit/_apis/getNicknameCheck.ts
  • apps/web/src/app/mypage/edit/_hooks/usePatchMe.ts
  • apps/web/src/consts/api.ts

Comment thread apps/web/src/app/invite/[id]/_components/InviteClient.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 초대 링크 참여 — proxy 자동 게스트 로그인 확인 및 닉네임 PATCH API 연동

2 participants