null 가능
으로 되어있어서const room_id = room[0]?.id;
// 이 부분에서 [room_id] 이렇게만 써버렸다.
const updatedData = [...userInfo.chat_rooms, room_id];
const { data, error } = await supabase
.from('user')
.update({ chat_rooms: updatedData })
.eq('uid', userInfo[0].uid)
.select();
채팅방 존재 O => '이어서 채팅하기'
채팅방 존재 X => '채팅 후 구매하기'
const [isExist, setIsExist] = useState<boolean>(false);
// 채팅방 테이블을 조회하여 채팅방의 중복을 판단하는 함수
const isExistsRoom = async () => {
const { data: chat_rooms, error } = await supabase
.from('chat_room')
.select('about')
.eq('about', id);
if (chat_rooms && chat_rooms.length > 0) {
setIsExist(true);
console.log('exists!');
}
};
useEffect(() => {
isExistsRoom();
}, []);
원래 정상적인 작동하면 채팅방을 한번 누르면 그 채팅방의 메세지를 가져오고 끝나야 되는데
그 채팅방을 누를 때마다 똑같은 데이터를 가져오는 버그였다.
원인
처음에는 실시간으로 오는 데이터를 기존
채팅방 state에 업데이트 해주는 방식으로 했는데
해결
실시간 업데이트가 발생하면 채팅방과 연결 된 메세지들을
통으로 다시 state에 업데이트 해주는 것으로 해결되었다.
원인
supabase storage는 한글 이름의 파일을 유효하지 않은 이름의 파일로 인식하기 때문에
아래와 같이 Invalid Input 에러
가 뜬다
해결
업로드 전 file의 이름을 영문으로 바꿔서 업로드 했다.
const handleImageUpload = async (file: File) => {
const { data, error } = await supabase.storage
.from('images')
// 받은 file을 'messages폴더에 고유id 값(숫자 + 영문)'으로 저장
.upload(`messages/${uuid()}`, file, {
contentType: file.type
});
if (error) {
console.error('파일 업로드 실패:', error);
return;
}
//... 생략//
};