기존 방식
- 관리자 페이지에서 DB 업로드 버튼을 클릭할 때마다 API로 불러 온 분양 데이터를 재가공한 후에 firestore에 새로운 데이터를 생성하는 방식을 사용했다.
- 즉, 기존 분양 공고 데이터는 모두 사라지고 새로 들어온 데이터로 덮어쓰게 되는 것이다.
- 기존 방식의 경우 간혹 좌표가 생성되지 않은 데이터가 있을 때는 DB에 좌표를 직접 추가해줘야 하는데 데이터를 업데이트할 때 마다 이 좌표까지 지워지기 때문에 매번 좌표를 추가해야 하는 문제가 발생한다.
- 또한 추후 API로 받아올 수 없는 분양 관련 이미지를 DB에 직접 추가한다고 가정했을 때 이 또한 DB를 업데이트하는 순간 모두 사라진다는 문제가 발생한다.
새로운 방식
- 따라서 관리자 페이지에서 firestore에 업데이트할 때 DB에 있는 기존 데이터는 유지하면서 새로 들어온 분양공고 데이터만 추가하는 로직으로 변경하기로 했다.
- SSG로 firestore에 저장된 기존 분양 공고 데이터인
homeListDB
를 불러온다.
const oldDataArray = homeListDB.filter(
(item: ItemJ) =>
item.RCEPT_ENDDE >= today || item.SUBSCRPT_RCEPT_ENDDE >= today,
);
- firestore에서 불러 온 기존 데이터 중 접수일이 종료되지 않은 것만 필터링한
oldDataArray
를 생성한다.
const PBLANCArray = homeListDB.map((item) => item.PBLANC_NO);
- 새로 들어온 데이터를 필터링할 때 사용하기 위해 기존
homeListDB
에서 PBLANC_NO
(유니크한 id)만 추출한 배열을 생성한다.
const newDataArray = possibleAllHomeList.filter(
(item: any) => !PBLANCArray.includes(`${item.PBLANC_NO}`),
);
- API로 새로 불러 온 분양 공고 데이터 중에서 기존 DB에 없는 새로운 정보들만 필터링하여
newDataArray
를 생성한다.