친구 요청

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]
);