240731 TIL_최종 프로젝트_실시간 채팅, 검색

미밍·2024년 7월 31일
1

우당탕탕 개발 일기

목록 보기
90/108

실시간 채팅 하루만 가져오게 일단 수정


        .gte('created_at', new Date().toISOString().split('T')[0])
        .lt('created_at', new Date(new Date().setDate(new Date().getDate() + 1)).toISOString().split('T')[0])

해당 수파베이스 매서드

.gte
.lt

api 에 친절하게 나와있는데 gte => Gteater than or equal to
lt less than

이라서 이상~ 미만 설정이다. (초과 미만은 gt ~ lt 쓰면 됨)

당일 날짜를 쪼개서 가져오는 매서드


검색 관련!!
1. 모든 데이터를 가져와서 => 클라이언트 사이드에서 uesQeury에 데이터 담아서 그걸 통해서 filter 할 생각이었음

  1. 그걸 서버에서 가능 ~.~

=> 데이터가 DB로 들어가면서 로직이 바뀐당.

수파베이스 서치 매서드를 쓰기로 했다.


트러블 슈팅

Post로 받고 어찌저찌 하는 도중

에러1)

TypeError: Failed to execute 'json' on 'Response': body stream already read

    console.log(response.json());
    return response.json();

data 에 안 담고 일단 그냥 return 시켰는데 콘솔로 한 번 더 찍으려고 해서 그런 듯. json은 한 번만 호출된단다. console 삭제

에러2)

"text search configuration \"korean\" does not exist

{
      type: 'websearch',
      config: 'korean'
    }

config에 english 여서 korean으로 바꿨더니 안 된단다... 영어만 되는 모양. 아쉽다.

에러3)

data에..... 왜 쟤가 ? 네트워크 확인해보니 요청은 잘갔다. 200번 안녕. 초기값을 배열로 해놓은 터라 (맵으로 뿌려야 하니까~.~) 왜인지 고민.

그것은 바로바로 ~ 서버에서 기재해놓은 값이랑 클라이언트에서 기재해놓은 값이 달라서!!!! ㅋㅋㅋㅋㅋㅋ 서버에서는 inputValue, 클라이언트에서는 inptuValue 였다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 굉장히 자랑스럽게 inptuValue : searchTerm 하고 있었다. ^^

=> 리팩토링 다시 시작

textSearch는 영어만 지원해서 includes 된 한국어를 잘 지원하지 못한다. 수파베이스 ai에 물어보니 다른 매서드가 있어서 그걸로 바꾸는 중

조건식 줘야 하는데 진짜 뭔 타입 오류가 너무 나서 왜 이러는지 알아보는 중

에러3)

const getConditionalSearch = (
  tableName: string,
  searchValue: string
): string => {
  tableName === 'market'
    ? `시장명.ilke.%${searchValue}, 도로명주소.ilike.%${searchValue}`
    : `food_name.ilke.%${searchValue}, category.ilike.%${searchValue}`;
};

근데 return 썼더니 감쪽같이 사라짐 어흐흑.... return 진짜진짜진짜 중요하다....

그거 외에도, 저렇게 만든 함수를 집어넣으려고 하니까?

에러4)

(tableName: string, searchValue: string) => string' 형식의 인수는 'string' 형식의 매개 변수에 할당될 수 없습니다.

함수... 인데 string으로 집어넣으려고 해서 그런 것 같다. 근데... 근데 어캄. => string으로 알려줬는데도 안 되는 것인가?ㅠㅡㅠ

변수에 넣었다.

타입 지정 관련
as const 읽기 전용

1) 테이블을 그냥 string으로 넣을시 잘못된 접근이 있을 수 있다. (보안)

2) 허락된 테이블 배열로 넣고
3) 각각 타입을 지정 / as const / as typeof ###[number] 배열이니까

에러5)

매서드 잘못 씀 ㅋㅋ

ilike 다

에러6) 오류 ㅋㅋ

const getConditionalSearch = (
  tableValue: AllowedTable,
  searchValue: string
): string => {
  return tableValue === 'markets'
    ? `시장명.ilike.%${searchValue}%,도로명주소.ilike.%${searchValue}%`
    : `food_name.ilike.%${searchValue}%,category.ilike.%${searchValue}%`;
};

%{} 이거란다. 어흐흑ㅜㅜ .... % 빼먹었더니 안 되니까 잘 조심히 잘 보고 하기........

에러 7 ) 리리리리ㅣ리리팩토링

const getConditionalSearch = (
  tableValue: AllowedTable,
  searchValue: string
): string => {
  if (tableValue === 'markets') {
    return `시장명.ilike.%${searchValue}%,도로명주소.ilike.%${searchValue}%`;
  } else if (tableValue === 'local-food') {
    return `food_name.ilike.%${searchValue}%,category.ilike.%${searchValue}%`;
  } else {
    return '';
  }
};

else 안 붙이니까 string이 아니랜다. 그래서 else return '' 반환

profile
프론트앤드; Frontend

0개의 댓글