Skip to content

Commit df96da8

Browse files
authored
Merge pull request #212 from prgrms-web-devcourse-final-project/feat/159-chat-request-and-cancel
[feat] createChat api 변경, 유저 차단 시도 시 모달 생성
2 parents da58254 + 00a05a7 commit df96da8

File tree

5 files changed

+66
-33
lines changed

5 files changed

+66
-33
lines changed

src/apis/chat.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,24 @@ export const cancelChatRequest = async (emotionRecordId: number) => {
1616
return data;
1717
};
1818
//채팅방 생성
19-
export const createChatroom = async (emotionRecordId: number) => {
20-
const { data } = await axiosInstance.post(`/chat/create?recordId=${emotionRecordId}`, {});
19+
export const createChatroom = async (emotionRecordId: number, requestNickname: string) => {
20+
const { data } = await axiosInstance.post(
21+
`/chat/create?recordId=${emotionRecordId}&requestNickname=${requestNickname}`,
22+
{},
23+
);
2124
return data;
2225
};
2326
//채팅방 닫기
2427
export const closeChatroom = async (chatRoomId: number) => {
2528
const { data } = await axiosInstance.post(`/chat/close?chatRoomId=${chatRoomId}`, {});
2629
return data;
2730
};
28-
//채팅방 기록 불러오기
31+
//채팅방 기록 불러오기(개발서버)
32+
export const loadChatHistoryDev = async (chatRoomId: number) => {
33+
const { data } = await axiosInstance.get(`/chat/history?chatRoomId=${chatRoomId}`);
34+
return data;
35+
};
36+
//채팅방 기록 불러오기(배포)
2937
export const loadChatHistory = async (chatRoomId: number) => {
3038
const { data } = await axiosChatInstance.get(`/chat/history/${chatRoomId}`);
3139
return data;

src/components/ChatConnectLoadingSheet.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,11 @@ export default function ChatConnectLoadingSheet() {
7272
//채팅방 생성 (요청 받는 사람 입장에서 생성?)
7373
//sse로 받은 recordId로 채팅방 생성
7474
//sse로 받은 상대 정보로 '보내는 사람' 바꾸기
75+
//sse로 받은 requsetNickname(tag가 아니라 닉네임)
7576
const createChat = async () => {
7677
try {
7778
//1 = recordId
78-
const data = await createChatroom(1);
79+
const data = await createChatroom(1, '루루');
7980
console.log(data);
8081
const chatRoomId = data.data.chatRoomId;
8182

src/hooks/useMoreOptions.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,30 @@ export const useMoreOptions = () => {
3838
}
3939

4040
openModal({
41-
title: `${userData?.nickname}을 차단할까요?`,
41+
title: [
42+
{ text: `${userData?.nickname}`, className: 'text-primary-normal' },
43+
{ text: ' 님을 차단할까요?' },
44+
],
4245
message: '차단된 사용자는 더이상 피드에 나타나지 않습니다',
4346
onConfirm: async () => {
4447
if (param.userId) {
4548
try {
4649
const data = await addBlockList(param.userId);
47-
closeModal();
4850
console.log(data);
51+
//이미 차단 한 유저일 경우
52+
if (data.code === 400) {
53+
closeModal();
54+
openModal({
55+
title: `이미 차단한 유저입니다`,
56+
onConfirm: () => {
57+
closeModal();
58+
},
59+
});
60+
} else {
61+
//차단 후 홈으로 이동
62+
navigate('/home');
63+
closeModal();
64+
}
4965
} catch (error) {
5066
console.log(error);
5167
}

src/pages/chat/ChatRoom.tsx

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,31 @@ import { Client, StompSubscription } from '@stomp/stompjs';
55
import SockJS from 'sockjs-client';
66
import { useEffect, useRef, useState } from 'react';
77
import { MAX_CHAT_MESSAGE_LENGTH } from '@/constants';
8-
import { loadChatHistory } from '@/apis/chat';
8+
import { loadChatHistoryDev } from '@/apis/chat';
99
import { useAuthStore } from '@/store/authStore';
10-
// import { getUserInfo } from '@/apis/user';
1110
import { useScrollStore } from '@/store/scrollStore';
1211

12+
import dayjs from 'dayjs';
13+
import utc from 'dayjs/plugin/utc';
14+
import timezone from 'dayjs/plugin/timezone';
15+
import 'dayjs/locale/ko';
16+
dayjs.extend(utc);
17+
dayjs.extend(timezone);
18+
1319
interface ChatRoomProps {}
1420

1521
//메시지 타입
1622
interface ChatMessage {
17-
// fromUserId?: string;
18-
message: string;
23+
fromUserId?: string;
1924
chatRoomId: number;
25+
message: string;
2026
createdAt?: string;
2127
isMyMessage?: boolean;
2228
}
23-
// interface ChatUser {
24-
// nickName: string;
25-
// email: string;
26-
// loginId: string;
27-
// createdAt: string;
28-
// }
2929

3030
export default function ChatRoom({}: ChatRoomProps) {
3131
// const [chatRoomId, setChatRoomId] = useState<number | null>(7);
32-
const chatRoomId = 7;
32+
const chatRoomId = 1;
3333
// const [myUserData, setMyUserData] = useState<ChatUser | null>(null);
3434

3535
const [stompClient, setStompClient] = useState<Client | null>(null);
@@ -50,16 +50,6 @@ export default function ChatRoom({}: ChatRoomProps) {
5050

5151
const MAX_LINES = 8;
5252

53-
// //내 정보 가져오기
54-
// useEffect(() => {
55-
// const getChatUser = async () => {
56-
// const data = await getUserInfo();
57-
// console.log(data);
58-
// setMyUserData(data.data);
59-
// };
60-
// getChatUser();
61-
// }, []);
62-
6353
const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
6454
setMessageInput(e.target.value);
6555
};
@@ -128,13 +118,14 @@ export default function ChatRoom({}: ChatRoomProps) {
128118
console.log('chatRoomId가 없습니다');
129119
return;
130120
}
131-
const response = await loadChatHistory(chatRoomId);
121+
//배포 시 변경
122+
const response = await loadChatHistoryDev(chatRoomId);
132123
console.log('history', response);
133124
if (response.status === 204) {
134125
console.warn('No chat history found (204 No Content)');
135126
return;
136127
}
137-
setMessages(response);
128+
setMessages(response.data);
138129
} catch (error) {
139130
console.error('Error fetching chat history:', error);
140131
}
@@ -200,6 +191,16 @@ export default function ChatRoom({}: ChatRoomProps) {
200191
}
201192
};
202193

194+
// 10분 연장 요청
195+
// const handleExtendSession = () => {
196+
// if (stompClient) {
197+
// stompClient.publish({
198+
// destination: '/app/extendSession',
199+
// body: JSON.stringify({}), // 빈 JSON 객체 전달
200+
// });
201+
// }
202+
// };
203+
203204
//채팅방 입장 시 connect
204205
//나갈 때 disconnect
205206
useEffect(() => {
@@ -251,13 +252,20 @@ export default function ChatRoom({}: ChatRoomProps) {
251252
})}
252253

253254
{/* 마지막 메시지의 시간 표시 */}
254-
<p className="text-gray-500 text-xs text-center mt-2">{messages.at(-1)?.createdAt}</p>
255+
{!!messages.length && (
256+
<p className="text-gray-500 text-xs text-center mt-2">
257+
{dayjs(messages.at(-1)?.createdAt)
258+
.tz('Asia/Seoul')
259+
.locale('ko')
260+
.format('YYYY년 M월 D일 dddd')}
261+
</p>
262+
)}
255263
</div>
256264

257-
<div>
265+
{/* <div>
258266
<Button onClick={connect}>채팅 연결</Button>
259267
<Button onClick={disconnect}>채팅 연결 해제</Button>
260-
</div>
268+
</div> */}
261269

262270
<div className="bottom-padding-nav px-3 pt-[5px] bg-white max-w-[600px] fixed bottom-0 w-full left-1/2 -translate-x-1/2 z-41">
263271
<div className="flex justify-between mb-2 caption-b">

vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export default defineConfig(({ mode }) => {
8989
'/chatapi': {
9090
target: env.VITE_CHAT_API_URL,
9191
changeOrigin: true, // 백엔드 서버 주소로 변경
92-
rewrite: (path) => path.replace(/^\/chatapi/, '/api'),
92+
rewrite: (path) => path.replace(/^\/chatapi/, '/'),
9393
},
9494
},
9595
},

0 commit comments

Comments
 (0)