Skip to content

Commit cff0097

Browse files
authored
Merge pull request #76 from JECT-Study/hotfix/74-Various-fixes
fix: gate chat queries behind auth readiness
2 parents 50cc703 + a098e68 commit cff0097

5 files changed

Lines changed: 19 additions & 13 deletions

File tree

src/app/chat/[roomId]/page.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { useChatRoom } from "@/hooks/useChatRoom";
1010
import { useChatRooms } from "@/hooks/useChatRooms";
1111
import { useChatSocket } from "@/hooks/useChatSocket";
1212
import { useMessages } from "@/hooks/useMessages";
13+
import { useRequireAuth } from "@/hooks/useRequireAuth";
1314
import { useSession } from "@/services/session";
1415

1516
interface ChatRoomPageProps {
@@ -27,10 +28,12 @@ export default function ChatRoomPage({ params }: ChatRoomPageProps) {
2728
const id = Number(roomId);
2829

2930
const { myUserId } = useSession();
31+
const { isAuthReady, isAuthenticated } = useRequireAuth();
32+
const canFetchRoom = isAuthReady && isAuthenticated && Number.isFinite(id);
3033

3134
// 방 정보: 딥링크/새로고침 대비 상세 조회(useChatRoom) 우선, 없으면 방 목록 캐시 폴백.
32-
const { data: roomDetail, isError: isRoomError, error: roomError } = useChatRoom(id);
33-
const { data: roomsData } = useChatRooms();
35+
const { data: roomDetail, isError: isRoomError, error: roomError } = useChatRoom(id, canFetchRoom);
36+
const { data: roomsData } = useChatRooms(undefined, canFetchRoom);
3437
const roomListItem = useMemo(
3538
() => roomsData?.pages.flatMap(page => page.items).find(r => r.id === id),
3639
[roomsData, id]
@@ -56,9 +59,9 @@ export default function ChatRoomPage({ params }: ChatRoomPageProps) {
5659
isError: isMessagesError,
5760
error: messagesError,
5861
refetch: refetchMessages,
59-
} = useMessages(id);
62+
} = useMessages(id, undefined, canFetchRoom);
6063

61-
const canConnectSocket = Boolean(roomDetail || roomListItem);
64+
const canConnectSocket = canFetchRoom && Boolean(roomDetail || roomListItem);
6265
const { sendMessage, markAsRead, lastError, isConnected } = useChatSocket(id, canConnectSocket);
6366

6467
const messages = useMemo(
@@ -106,7 +109,7 @@ export default function ChatRoomPage({ params }: ChatRoomPageProps) {
106109
</div>
107110
)}
108111

109-
{isLoading ? (
112+
{!canFetchRoom || isLoading ? (
110113
<div className="flex flex-1 items-center justify-center">
111114
<div className="text-body-1 text-text-secondary">메시지를 불러오는 중...</div>
112115
</div>

src/app/chat/page.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ import ChatListItem from "@/components/chat/ChatListItem";
66
import EmptyChat from "@/components/chat/EmptyChat";
77
import { CHAT_LIST_TITLE, CHAT_LOADING_MESSAGE } from "@/constants/chat";
88
import { useChatRooms } from "@/hooks/useChatRooms";
9+
import { useRequireAuth } from "@/hooks/useRequireAuth";
910

1011
function getErrorMessage(error: unknown) {
1112
return error instanceof Error ? error.message : "채팅 목록을 불러오지 못했습니다.";
1213
}
1314

1415
export default function ChatListPage() {
1516
const router = useRouter();
17+
const { isAuthReady, isAuthenticated } = useRequireAuth();
18+
const canFetchChatRooms = isAuthReady && isAuthenticated;
1619
const {
1720
data,
1821
isLoading,
@@ -22,7 +25,7 @@ export default function ChatListPage() {
2225
hasNextPage,
2326
fetchNextPage,
2427
refetch,
25-
} = useChatRooms();
28+
} = useChatRooms(undefined, canFetchChatRooms);
2629

2730
const rooms = data?.pages.flatMap(page => page.items) ?? [];
2831

@@ -32,7 +35,7 @@ export default function ChatListPage() {
3235
<h1 className="text-headline-1 text-text-primary font-semibold">{CHAT_LIST_TITLE}</h1>
3336
</header>
3437

35-
{isLoading ? (
38+
{!canFetchChatRooms || isLoading ? (
3639
<div className="flex flex-1 items-center justify-center">
3740
<div className="text-body-1 text-text-secondary">{CHAT_LOADING_MESSAGE}</div>
3841
</div>

src/hooks/useChatRoom.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ export function chatRoomKey(roomId: number) {
1313
return ["chat", "room", roomId] as const;
1414
}
1515

16-
export function useChatRoom(roomId: number) {
16+
export function useChatRoom(roomId: number, enabled = true) {
1717
return useQuery<ChatRoom>({
1818
queryKey: chatRoomKey(roomId),
1919
queryFn: () => getChatRoom(roomId),
2020
// 토큰 없으면 401 확정, roomId 유효성도 함께 게이팅.
21-
enabled: Boolean(getAccessToken()) && Number.isFinite(roomId),
21+
enabled: enabled && Boolean(getAccessToken()) && Number.isFinite(roomId),
2222
});
2323
}

src/hooks/useChatRooms.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type { ChatRoomListItem, CursorPage } from "@/types/chat";
88

99
export const CHAT_ROOMS_KEY = ["chat", "rooms"] as const;
1010

11-
export function useChatRooms(size?: number) {
11+
export function useChatRooms(size?: number, enabled = true) {
1212
const { accessToken } = useSession();
1313

1414
return useInfiniteQuery<CursorPage<ChatRoomListItem>>({
@@ -18,6 +18,6 @@ export function useChatRooms(size?: number) {
1818
getNextPageParam: lastPage =>
1919
lastPage.hasNext ? (lastPage.nextCursor ?? undefined) : undefined,
2020
// 토큰이 없으면 401이 뻔하므로 호출하지 않는다.
21-
enabled: Boolean(accessToken),
21+
enabled: enabled && Boolean(accessToken),
2222
});
2323
}

src/hooks/useMessages.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export function messagesKey(roomId: number) {
1313
return ["chat", "messages", roomId] as const;
1414
}
1515

16-
export function useMessages(roomId: number, size?: number) {
16+
export function useMessages(roomId: number, size?: number, enabled = true) {
1717
const { accessToken } = useSession();
1818

1919
return useInfiniteQuery<CursorPage<Message>>({
@@ -22,6 +22,6 @@ export function useMessages(roomId: number, size?: number) {
2222
initialPageParam: undefined as string | undefined,
2323
getNextPageParam: lastPage =>
2424
lastPage.hasNext ? (lastPage.nextCursor ?? undefined) : undefined,
25-
enabled: Boolean(accessToken) && Number.isFinite(roomId),
25+
enabled: enabled && Boolean(accessToken) && Number.isFinite(roomId),
2626
});
2727
}

0 commit comments

Comments
 (0)