Closed domino8788 closed 4 years ago
firestore 의 동작방식에 대해 주의할 점이 발견됐다.
firestore의 CRUD 에 따른 동작은 다음 규칙을 따른다.
이때 오프라인 상태에서 캐시에서 데이터를 다루도록 별도의 명시를 하지 않으면 DB에 CRUD 요청 후 결과값이 담긴 콜백함수가 호출되지 않는다.
즉 서버와 통신하는게 목적인 상태로 호출했으니 서버와 통신하기 전까진 콜백함수를 호출하지 않겠다는 것이다. 실제 온라인 상태로 전환하면 콜백함수가 호출된다.
해당 사항을 주의해야 하는 이유는 view와 서버간 데이터의 일치를 위해 callback 에서 CRUD 결과를 확인한 후 view의 상태에 대한 변화를 요청하면 오프라인 상태에서 작동하지 않는다는 문제가 발생하는 것에 있다.
CRUD 요청 이전에 View에 변경사항을 반영하고 callback에서 작업을 실패했을때 View의 변경사항을 롤백하는 구조로 구현하도록 한다.
DTO 클래스 구현을 #103 에 명시했으므로 참고한다.
위의 커밋을 통해 구현을 완료했으므로 이슈를 닫는다.
users/학번 문서 안에 favorites 컬렉션을 생성하고 그 안에 즐겨찾기를 문서의 형태로 저장하는 기능을 구현한다.
[x] Favorites DTO 클래스를 구현한다.
해당 DTO 클래스는 즐겨찾기를 표시하기 위한 정보가 담기는게 아니다.
SearchableFacility를 구성하기 위한 데이터를 쿼리할 수 있는 참조정보가 담긴다.
서버와 데이터를 주고 받는 양식으로 규정한다.
103 의 구조를 참고한다.
[x] 즐겨찾기를 추가 및 저장하는 기능을 구현한다.
즐겨찾기 리스트의 크기를 인덱스로 한다.
뷰와 서버에 추가 및 저장 요청을 하게 구현한다.
기존의 즐겨찾기 추가 코드를 수정하도록 한다.
아래 주의사항을 참고한다.
즐겨찾기에 중복된 데이터가 추가되지 않도록 구현한다.