ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] Firebase의 Firestore
    카테고리 없음 2024. 5. 30. 09:48

    사용법

    이전에 작성한 코드 중 일부를 가져왔습니다.

    코드 주석으로 설명을 하겠습니다.

    class PostRepositoryImpl @Inject constructor(
        private val firebaseDataSource: FirebaseDataSource
    ) : PostRepository {
    
        // "posts"를 기반으로 부모 Reference를 가져오는 프로퍼티입니다.
        // 굳이 DataSource를 만들지 않고 Firebase.firestore를 통해 바로 가져올 수 있습니다.
        private val reference get() = firebaseDataSource.firestore.collection(REFERENCE_PATH)
    
        override suspend fun createPost(postModel: PostModel) {
            // "posts" 부모 Reference에 postModel.uniqueId를 키로 지정하여 postModel를 설정해주는 구문입니다.
            reference.document(postModel.uniqueId).set(postModel).await()
        }
    
        override suspend fun deletePost(postModel: PostModel) {
            // "posts" 부모 Reference에 postModel.uniqueId 키를 가진 자식 Reference를 가져와서 제거합니다.
            reference.document(postModel.uniqueId).delete().await()
        }
    
        override suspend fun updatePost(postModel: PostModel) {
            // Reference#set(Any) 방식이 기존에 데이터가 있으면 Update하는 방식이기 때문에 같은 구문을 사용하였습니다.
            createPost(postModel)
        }
    
        override suspend fun getPosts(tags: List<String>): List<PostModel> {
            // get/await을 통해 QuerySnapshot을 가져와서 documents를 DocumentSnapshot#toObject(Class)를 통해 매핑합니다.
            // 위에서 PostModel 데이터 클래스를 넘겨주었기 때문에 PostModel로 매핑할 수 있게 됩니다.
            return reference.get().await().documents.mapNotNull { documentSnapshot ->
                documentSnapshot.toObject(PostModel::class.java)?.takeIf {
                    it.tags.containsAll(tags)
                }
            }
        }
        
        private companion object {
            const val REFERENCE_PATH = "posts"
        }
    }
Designed by Tistory.