친구 요청
if (req.method === 'POST') {
const { userID, friendUserID, status } = req.body;
const [existRequest] = await connection.execute<RowDataPacket[]>(
'SELECT * FROM friend WHERE userID = ? AND friendUserID = ?',
[userID, friendUserID]
);
if (existRequest.length === 0) {
const requestFriend = await connection.execute(
'INSERT INTO friend (userID, friendUserID, status, createAt) VALUES (? ,? ,?, NOW())',
[userID, friendUserID, status]
);
if (requestFriend.length > 0) {
res
.status(200)
.json({ success: true, message: 'Request successful' });
} else {
res
.status(500)
.json({ success: false, message: 'Failed to create request' });
}
} else {
res
.status(409)
.json({ success: false, message: 'Request already exists' });
}
친구 조회
userID로 요청한 경우
const [myRequestFromUser] = await connection.execute<RowDataPacket[]>(
'SELECT * FROM friend WHERE friendUserID = ? AND status = 1',
[userID]
);
const newData2 = myRequestFromUser.map((request) => {
const user = userList.find(
(user) => user.user_index === request.userID
);
return { ...request, userEmail: user ? user.user_nickname : null };
});
userID로 요청을 받은 경우
const [myRequestFromFriend] = await connection.execute<RowDataPacket[]>(
'SELECT * FROM friend WHERE userID = ? AND status = 1',
[userID]
);
const newData3 = myRequestFromFriend.map((request) => {
const user = userList.find(
(user) => user.user_index === request.friendUserID
);
return { ...request, userEmail: user ? user.user_nickname : null };
});
중복 조회 처리
// 중복 조회 처리
const allRequests = [...newData2, ...newData3];
const seenEmails = new Set();
const deduplication = allRequests.filter((request) => {
if (!seenEmails.has(request.userEmail)) {
seenEmails.add(request.userEmail);
return true; // 중복이 아닐 경우 유지
}
return false; // 중복인 경우 필터링
});
1대1 채팅 구현
const [areWeFriends] = await connection.execute<RowDataPacket[]>(
'SELECT * FROM friend WHERE (userID = ? AND friendUserID = ?) OR (userID = ? AND friendUserID = ?)',
[chat_user_id, exampleID, exampleID, chat_user_id]
);