240731 TIL

웅웅·2024년 7월 31일

supabase realtime 실시간 메세지 받기

  const checkChannelOwner = async (channel_id: number): Promise<String | null> => {
    const { data, error } = await supabase
      .from('chat_channels')
      .select('owner_id')
      .eq('channel_id', channel_id)
      .single()
    if (error) {
      console.log(error);
      return null;
    }
    else {
      console.log(data.owner_id);
      return data.owner_id;
    }
  }

채널 정보를 통해 채널의 소유주가 누구인지 반환해준다

  const receiveChatMessage = async (channel_id: number) => {
    const user_id = await userdata.id
    const approve = await userdata.approve
    const owner_id = await checkChannelOwner(channel_id);
    if (approve && owner_id == user_id) {
      console.log('인플루언서 본인의 채팅방입니다.')
      const channelInflu = supabase
      .channel('changes')
      .on(
        'postgres_changes',
        {
          event: 'INSERT',
          schema: 'public',
          table: 'chat_messages',
          filter: `channel_id=eq.${channel_id}`,
        },
        (payload) => console.log(payload)
      )
      .subscribe()
    } else {
      console.log('팬 채팅방입니다.')
      const channelFan = supabase
      .channel('changes')
      .on(
        'postgres_changes',
        {
          event: 'INSERT',
          schema: 'public',
          table: 'chat_messages',
          filter: `channel_id=eq.${channel_id}`,
        },
        (payload) => console.log(payload)
      )
      .subscribe()
    }

  }

본인의 채팅방인지 확인해주고 실시간으로 받는 메세지를 구분해준다.
문제점 : 다중 열 필터 기능이 아직 개발되지 않은 문제로 실시간 값을 받은 후 이차 필터링을 해줄 것
추후 보완수정 작업을 거칠 예정이다.

0개의 댓글