Skip to content

Commit fb64808

Browse files
authored
게스트 모집에 참여 신청 혹은 확정된 사용자 정보 목록 조회 api mocking (#82)
* feat: CommonErrorResponse 타입 선언 * fix: getGameMembers 함수명 수정 * feat: pendingMembersMap mock data 추가 * feat: useGameMembersQuery 훅 작성 * feat: mockGetGameMembers mock api handler 작성
1 parent 36da334 commit fb64808

File tree

4 files changed

+72
-8
lines changed

4 files changed

+72
-8
lines changed

src/api/games/getGameMembers.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ import { axiosInstance } from '@api/axiosInstance';
33
import { GetGameMembersResponse } from '@type/api/games';
44
import { Game } from '@type/models';
55

6-
export const getGameMebers = async ({
7-
gameId,
8-
status,
9-
}: {
6+
export type getGameMembersProps = {
107
gameId: Game['id'];
118
status: '대기' | '확정';
12-
}) => {
9+
};
10+
11+
export const getGameMembers = async ({
12+
gameId,
13+
status,
14+
}: getGameMembersProps) => {
1315
const { data } = await axiosInstance.get<GetGameMembersResponse>(
1416
`/api/games/${gameId}/members`,
1517
{
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { useSuspenseQuery } from '@tanstack/react-query';
2+
3+
import { getGameMembers, getGameMembersProps } from '@api/games/getGameMembers';
4+
5+
export const useGameMembersQuery = ({
6+
gameId,
7+
status,
8+
}: getGameMembersProps) => {
9+
return useSuspenseQuery({
10+
queryKey: ['game-members', gameId, status],
11+
queryFn: () => getGameMembers({ gameId, status }),
12+
});
13+
};

src/mocks/data/game.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Game } from '@type/models';
1+
import { Game, Member } from '@type/models';
22

33
export const games: Game[] = Array(100)
44
.fill({
@@ -63,3 +63,25 @@ export const games: Game[] = Array(100)
6363
...game,
6464
id: index + 1,
6565
}));
66+
67+
export const pendingMembers: Member[] = Array(5)
68+
.fill({
69+
id: 0,
70+
71+
nickname: 'james123',
72+
introduction: '안녕하십니까. 제임스입니다. 아이고~ 사장님~~',
73+
profileImageUrl: 'https://s3.amazonaws.com/pickple/james123.jpg',
74+
mannerScore: 21,
75+
mannerScoreCount: 30,
76+
addressDepth1: '서울시',
77+
addressDepth2: '강남구',
78+
positions: ['C', 'PF'],
79+
})
80+
.map((member: Member, index) => ({
81+
...member,
82+
id: index + 1,
83+
}));
84+
85+
export const pendingMembersMap: Member[][] = Array(101)
86+
.fill(null)
87+
.map(() => pendingMembers);

src/mocks/handlers/game.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import { DefaultBodyType, HttpResponse, PathParams, http } from 'msw';
33
import { CommonErrorResponse } from '@type/api/error';
44
import {
55
GetGameDetailResponse,
6+
GetGameMembersResponse,
67
PostGameRequest,
78
PostGameResponse,
89
} from '@type/api/games';
910
import { Game, Member } from '@type/models';
1011

11-
import { games } from '@mocks/data/game';
12+
import { games, pendingMembersMap } from '@mocks/data/game';
1213

1314
const mockPostGame = http.post<
1415
PathParams,
@@ -64,6 +65,32 @@ const mockGetGames = http.get('/api/games', ({ request }) => {
6465
return HttpResponse.json(games.slice(startIndex, startIndex + size));
6566
});
6667

68+
const mockGetGameMembers = http.get<
69+
{ gameId: string },
70+
DefaultBodyType,
71+
GetGameMembersResponse | CommonErrorResponse
72+
>('/api/games/:gameId/members', ({ params, request }) => {
73+
const { searchParams } = new URL(request.url);
74+
const status = searchParams.get('status');
75+
const gameId = Number(params.gameId);
76+
77+
if (!status || (status !== '대기' && status !== '확정')) {
78+
return HttpResponse.json({ code: 'COM-002' }, { status: 400 });
79+
}
80+
const game = games.find((game) => game.id === gameId);
81+
if (!game) {
82+
return HttpResponse.json({ code: 'COM-004' }, { status: 400 });
83+
}
84+
85+
if (status === '대기') {
86+
return HttpResponse.json({
87+
...game,
88+
members: pendingMembersMap[gameId],
89+
});
90+
}
91+
return HttpResponse.json(game);
92+
});
93+
6794
const mockGetGameDetail = http.get<
6895
{ gameId: string },
6996
DefaultBodyType,
@@ -79,4 +106,4 @@ const mockGetGameDetail = http.get<
79106
return HttpResponse.json(game);
80107
});
81108

82-
export const gameHandlers = [mockPostGame, mockGetGames, mockGetGameDetail];
109+
export const gameHandlers = [mockPostGame, mockGetGames, mockGetGameDetail, mockGetGameMembers];

0 commit comments

Comments
 (0)