From ca1bfb4ca2cfb89240c69ff209d3a4f916b8f736 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:22:50 +0900 Subject: [PATCH 1/5] feat: postJoinRoom --- src/api/rooms/postJoinRoom.ts | 23 ++++++++++++++++++++ src/pages/groupDetail/GroupDetail.tsx | 31 ++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/api/rooms/postJoinRoom.ts diff --git a/src/api/rooms/postJoinRoom.ts b/src/api/rooms/postJoinRoom.ts new file mode 100644 index 00000000..b4818893 --- /dev/null +++ b/src/api/rooms/postJoinRoom.ts @@ -0,0 +1,23 @@ +import { apiClient } from '../index'; + +export interface PostJoinRoomRequest { + type: 'join' | 'cancel'; +} + +export interface PostJoinRoomResponse { + isSuccess: boolean; + code: number; + message: string; + data: { + roomId: number; + type: string; + }; +} + +export async function postJoinRoom( + roomId: number | string, + type: 'join' | 'cancel', +): Promise { + const response = await apiClient.post(`/rooms/${roomId}/join`, { type }); + return response.data; +} diff --git a/src/pages/groupDetail/GroupDetail.tsx b/src/pages/groupDetail/GroupDetail.tsx index ac9e5440..501b3ab0 100644 --- a/src/pages/groupDetail/GroupDetail.tsx +++ b/src/pages/groupDetail/GroupDetail.tsx @@ -39,6 +39,7 @@ import { type RoomDetailResponse, type RecommendRoom, } from '@/api/rooms/getRoomDetail'; +import { postJoinRoom } from '@/api/rooms/postJoinRoom'; import type { Group } from '@/components/group/MyGroupBox'; const GroupDetail = () => { @@ -49,6 +50,8 @@ const GroupDetail = () => { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); + const [isJoining, setIsJoining] = useState(null); + const handleBackButton = () => { navigate(-1); }; @@ -106,6 +109,12 @@ const GroupDetail = () => { fetchRoomDetail(); }, [roomId]); + useEffect(() => { + if (roomData) { + setIsJoining(roomData.isJoining); + } + }, [roomData]); + if (isLoading) { return
로딩 중...
; } @@ -142,6 +151,24 @@ const GroupDetail = () => { navigate(`/group/detail/${roomId}`); }; + const handleBottomButtonClick = async () => { + if (roomData.isHost) { + alert('모집 마감하기 API 호출'); + return; + } + const type = isJoining ? 'cancel' : 'join'; + try { + const result = await postJoinRoom(Number(roomId), type); + if (result.isSuccess) { + setIsJoining(type === 'join'); + } else { + alert(`요청 실패: ${result.message}`); + } + } catch { + alert('네트워크 오류 또는 서버 오류'); + } + }; + return ( @@ -217,7 +244,9 @@ const GroupDetail = () => { ))} - 참여하기 + + {roomData.isHost ? '모집 마감하기' : isJoining ? '참여 취소하기' : '참여하기'} + ); }; From 7f7a4d40d1668cb517057b1cb8cd6902b87e0625 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:25:20 +0900 Subject: [PATCH 2/5] feat: postCloseRoom API --- src/api/rooms/postCloseRoom.ts | 15 +++++++++++++++ src/pages/groupDetail/GroupDetail.tsx | 13 ++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/api/rooms/postCloseRoom.ts diff --git a/src/api/rooms/postCloseRoom.ts b/src/api/rooms/postCloseRoom.ts new file mode 100644 index 00000000..23da9516 --- /dev/null +++ b/src/api/rooms/postCloseRoom.ts @@ -0,0 +1,15 @@ +import { apiClient } from '../index'; + +export interface PostCloseRoomResponse { + isSuccess: boolean; + code: number; + message: string; + data: { + roomId: number; + }; +} + +export async function postCloseRoom(roomId: number | string): Promise { + const response = await apiClient.post(`/rooms/${roomId}/close`); + return response.data; +} diff --git a/src/pages/groupDetail/GroupDetail.tsx b/src/pages/groupDetail/GroupDetail.tsx index 501b3ab0..b82181ae 100644 --- a/src/pages/groupDetail/GroupDetail.tsx +++ b/src/pages/groupDetail/GroupDetail.tsx @@ -40,6 +40,7 @@ import { type RecommendRoom, } from '@/api/rooms/getRoomDetail'; import { postJoinRoom } from '@/api/rooms/postJoinRoom'; +import { postCloseRoom } from '@/api/rooms/postCloseRoom'; import type { Group } from '@/components/group/MyGroupBox'; const GroupDetail = () => { @@ -153,13 +154,23 @@ const GroupDetail = () => { const handleBottomButtonClick = async () => { if (roomData.isHost) { - alert('모집 마감하기 API 호출'); + try { + const result = await postCloseRoom(Number(roomId)); + if (result.isSuccess) { + alert('모집 마감 성공!'); + } else { + alert(`요청 실패: ${result.message}`); + } + } catch { + alert('네트워크 오류 또는 서버 오류'); + } return; } const type = isJoining ? 'cancel' : 'join'; try { const result = await postJoinRoom(Number(roomId), type); if (result.isSuccess) { + alert(`${type === 'join' ? '참여' : '참여 취소'} 성공!`); setIsJoining(type === 'join'); } else { alert(`요청 실패: ${result.message}`); From 2208b3433c0c9ed62223077ed0816a24b63d058b Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:32:04 +0900 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=20error=20=EC=B2=98=EB=A6=AC=20ap?= =?UTF-8?q?i=20=ED=95=A8=EC=88=98=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/rooms/closeRoom.ts | 20 ++++++++++++++++++++ src/api/rooms/postJoinRoom.ts | 9 +++++++-- src/pages/groupDetail/GroupDetail.tsx | 15 ++------------- 3 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 src/api/rooms/closeRoom.ts diff --git a/src/api/rooms/closeRoom.ts b/src/api/rooms/closeRoom.ts new file mode 100644 index 00000000..4c900ecf --- /dev/null +++ b/src/api/rooms/closeRoom.ts @@ -0,0 +1,20 @@ +import { apiClient } from '../index'; + +export interface PostCloseRoomResponse { + isSuccess: boolean; + code: number; + message: string; + data: { + roomId: number; + }; +} + +export async function postCloseRoom(roomId: number | string): Promise { + try { + const response = await apiClient.post(`/rooms/${roomId}/close`); + return response.data; + } catch (error) { + console.error('방 닫기 API 오류:', error); + throw error; + } +} diff --git a/src/api/rooms/postJoinRoom.ts b/src/api/rooms/postJoinRoom.ts index b4818893..4719ba37 100644 --- a/src/api/rooms/postJoinRoom.ts +++ b/src/api/rooms/postJoinRoom.ts @@ -18,6 +18,11 @@ export async function postJoinRoom( roomId: number | string, type: 'join' | 'cancel', ): Promise { - const response = await apiClient.post(`/rooms/${roomId}/join`, { type }); - return response.data; + try { + const response = await apiClient.post(`/rooms/${roomId}/join`, { type }); + return response.data; + } catch (error) { + console.error('방 참여/취소 API 오류:', error); + throw error; + } } diff --git a/src/pages/groupDetail/GroupDetail.tsx b/src/pages/groupDetail/GroupDetail.tsx index b82181ae..cd1d1dcb 100644 --- a/src/pages/groupDetail/GroupDetail.tsx +++ b/src/pages/groupDetail/GroupDetail.tsx @@ -155,12 +155,7 @@ const GroupDetail = () => { const handleBottomButtonClick = async () => { if (roomData.isHost) { try { - const result = await postCloseRoom(Number(roomId)); - if (result.isSuccess) { - alert('모집 마감 성공!'); - } else { - alert(`요청 실패: ${result.message}`); - } + await postCloseRoom(Number(roomId)); } catch { alert('네트워크 오류 또는 서버 오류'); } @@ -168,13 +163,7 @@ const GroupDetail = () => { } const type = isJoining ? 'cancel' : 'join'; try { - const result = await postJoinRoom(Number(roomId), type); - if (result.isSuccess) { - alert(`${type === 'join' ? '참여' : '참여 취소'} 성공!`); - setIsJoining(type === 'join'); - } else { - alert(`요청 실패: ${result.message}`); - } + await postJoinRoom(Number(roomId), type); } catch { alert('네트워크 오류 또는 서버 오류'); } From 44c02b6a80db79b148a9adb20ef9092cf880dbc9 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:32:52 +0900 Subject: [PATCH 4/5] =?UTF-8?q?design:=20GroupDetail=20button=20cursor=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/groupDetail/GroupDetail.styled.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/groupDetail/GroupDetail.styled.ts b/src/pages/groupDetail/GroupDetail.styled.ts index 92ec1f63..39c9486e 100644 --- a/src/pages/groupDetail/GroupDetail.styled.ts +++ b/src/pages/groupDetail/GroupDetail.styled.ts @@ -225,4 +225,5 @@ export const BottomButton = styled.button` font-weight: ${typography.fontWeight.semibold}; border: none; z-index: 10; + cursor: pointer; `; From d51715a1feed58b163ca6ff019343fb7f65c7089 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:34:10 +0900 Subject: [PATCH 5/5] =?UTF-8?q?remove:=20=EB=AF=B8=EC=82=AC=EC=9A=A9=20api?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/rooms/closeRoom.ts | 20 -------------------- src/api/rooms/postCloseRoom.ts | 9 +++++++-- 2 files changed, 7 insertions(+), 22 deletions(-) delete mode 100644 src/api/rooms/closeRoom.ts diff --git a/src/api/rooms/closeRoom.ts b/src/api/rooms/closeRoom.ts deleted file mode 100644 index 4c900ecf..00000000 --- a/src/api/rooms/closeRoom.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { apiClient } from '../index'; - -export interface PostCloseRoomResponse { - isSuccess: boolean; - code: number; - message: string; - data: { - roomId: number; - }; -} - -export async function postCloseRoom(roomId: number | string): Promise { - try { - const response = await apiClient.post(`/rooms/${roomId}/close`); - return response.data; - } catch (error) { - console.error('방 닫기 API 오류:', error); - throw error; - } -} diff --git a/src/api/rooms/postCloseRoom.ts b/src/api/rooms/postCloseRoom.ts index 23da9516..4c900ecf 100644 --- a/src/api/rooms/postCloseRoom.ts +++ b/src/api/rooms/postCloseRoom.ts @@ -10,6 +10,11 @@ export interface PostCloseRoomResponse { } export async function postCloseRoom(roomId: number | string): Promise { - const response = await apiClient.post(`/rooms/${roomId}/close`); - return response.data; + try { + const response = await apiClient.post(`/rooms/${roomId}/close`); + return response.data; + } catch (error) { + console.error('방 닫기 API 오류:', error); + throw error; + } }