-
[안드로이드] 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" } }