Skip to content

Commit

Permalink
✨ Add 좋아요 기능 구현 [미완성]
Browse files Browse the repository at this point in the history
좋아요 기능 구현 [미완성] Related to : #52
  • Loading branch information
kimjingyoung committed Apr 24, 2024
1 parent d9bcb56 commit e50ffd3
Show file tree
Hide file tree
Showing 12 changed files with 626 additions and 73 deletions.
9 changes: 9 additions & 0 deletions farming_customer/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
id("com.google.gms.google-services")
id ("kotlin-parcelize")
}

android {
Expand Down Expand Up @@ -42,6 +43,7 @@ android {
}

dependencies {
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
Expand All @@ -65,4 +67,11 @@ dependencies {
implementation("com.google.firebase:firebase-firestore:24.11.1")
implementation("com.google.firebase:firebase-storage:20.3.0")

// glide
implementation ("com.github.bumptech.glide:glide:4.12.0")
implementation ("com.firebaseui:firebase-ui-storage:7.2.0")
implementation ("com.google.firebase:firebase-storage:20.2.0")
kapt ("com.github.bumptech.glide:compiler:4.12.0")
// implementation ("com.github.bumptech.glide:glide:4.16.0")
// implementation ("com.github.bumptech.glide:glide-okhttp3-integration:4.14.0")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package kr.co.lion.farming_customer.dao.like

import android.content.Context
import android.view.View
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.google.firebase.firestore.Query
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import com.google.firebase.storage.ktx.storage
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.tasks.await
import kotlinx.coroutines.withContext
import kr.co.lion.farming_customer.model.ActivityModel
import kr.co.lion.farming_customer.model.CropModel
import kr.co.lion.farming_customer.model.FarmModel
import kr.co.lion.farming_customer.model.LikeModel
import kr.co.lion.farming_customer.model.CommunityPostModel
import kr.co.lion.farming_customer.model.RentalModel

class LikeDao {

companion object {

// 농산품 좋아요 리스트
suspend fun getCropLikeList(userIdx:Int): List<LikeModel>{
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("LikeData")
val query = likeListRef.whereEqualTo("like_status", 1)
.whereEqualTo("like_user_idx", userIdx)
.whereEqualTo("like_type", 1)
.orderBy("like_idx", Query.Direction.ASCENDING)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(LikeModel::class.java) }
}
}

// 좋아요 클릭한 농산품 데이터 가져오기
suspend fun getCropList(like_type_idx:Int): List<CropModel>{
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("CropData")
val query = likeListRef.whereEqualTo("crop_idx", like_type_idx)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(CropModel::class.java) }
}
}



// 게시판 좋아요 리스트
suspend fun getPostLikeList(userIdx:Int): List<LikeModel>{
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("LikeData")
val query = likeListRef.whereEqualTo("like_status", 1)
.whereEqualTo("like_user_idx", userIdx)
.whereEqualTo("like_type", 2)
.orderBy("like_idx", Query.Direction.ASCENDING)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(LikeModel::class.java) }
}
}

// 좋아요 클릭한 게시판 데이터 가져오기
suspend fun getPostList(like_type_idx:Int): List<CommunityPostModel>{
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("CommunityPostData")
val query = likeListRef.whereEqualTo("postIdx", like_type_idx)
.whereEqualTo("postStatus", 1)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(CommunityPostModel::class.java) }
}
}

// 주말농장 좋아요 리스트
suspend fun getFarmLikeList(userIdx:Int): List<LikeModel>{
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("LikeData")
val query = likeListRef.whereEqualTo("like_status", 1)
.whereEqualTo("like_user_idx", userIdx)
.whereEqualTo("like_type", 3)
.orderBy("like_idx", Query.Direction.ASCENDING)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(LikeModel::class.java) }
}
}

// 좋아요 클릭한 주말농장 데이터 가져오기
suspend fun getFarmList(like_type_idx:Int): List<FarmModel> {
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("FarmData")
val query = likeListRef.whereEqualTo("farm_idx", like_type_idx)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(FarmModel::class.java) }
}
}

// 체험활동 좋아요 리스트
suspend fun getActivityLikeList(userIdx:Int): List<LikeModel>{
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("LikeData")
val query = likeListRef.whereEqualTo("like_status", 1)
.whereEqualTo("like_user_idx", userIdx)
.whereEqualTo("like_type", 4)
.orderBy("like_idx", Query.Direction.ASCENDING)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(LikeModel::class.java) }
}
}

// 좋아요 클릭한 체험활동 데이터 가져오기
suspend fun getActivityList(like_type_idx:Int): List<ActivityModel> {
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("ActivityData")
val query = likeListRef.whereEqualTo("activity_idx", like_type_idx)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(ActivityModel::class.java) }
}
}

// 농기구 좋아요 리스트
suspend fun getRentalLikeList(userIdx:Int): List<LikeModel>{
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("LikeData")
val query = likeListRef.whereEqualTo("like_status", 1)
.whereEqualTo("like_user_idx", userIdx)
.whereEqualTo("like_type", 5)
.orderBy("like_idx", Query.Direction.ASCENDING)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(LikeModel::class.java) }
}
}

// 좋아요 클릭한 체험활동 데이터 가져오기
suspend fun getRentalList(like_type_idx:Int): List<RentalModel> {
return withContext(Dispatchers.IO) {
val likeListRef = Firebase.firestore.collection("RentalData")
val query = likeListRef.whereEqualTo("rental_idx", like_type_idx)
val querySnapshot = query.get().await()
querySnapshot.map { it.toObject(RentalModel::class.java) }
}
}

// 이미지 데이터를 받아오는 메서드
suspend fun gettingCommunityPostImage(context: Context, imageFileName:String, imageView: ImageView){
val job1 = CoroutineScope(Dispatchers.IO).launch {
// 이미지에 접근할 수 있는 객체를 가져온다.
val storageRef = Firebase.storage.reference.child("image/community/$imageFileName")
// 이미지의 주소를 가지고 있는 Uri 객체를 받아온다.
val imageUri = storageRef.downloadUrl.await()
// 이미지 데이터를 받아와 이미지 뷰에 보여준다.
val job2 = CoroutineScope(Dispatchers.Main).launch {
Glide.with(context).load(imageUri).into(imageView)
// 이미지 뷰가 나타나게 한다.
imageView.visibility = View.VISIBLE
}
job2.join()

}
job1.join()
// 이미지는 용량이 매우 클 수 있다. 즉 이미지 데이터를 내려받는데 시간이 오래걸릴 수도 있다.
// 이에, 이미지 데이터를 받아와 보여주는 코루틴을 작업이 끝날 때 까지 대기 하지 않는다.
// 그 이유는 데이터를 받아오는데 걸리는 오랜 시간 동안 화면에 아무것도 나타나지 않을 수 있기 때문이다.
// 따라서 이 메서드는 제일 마지막에 호출해야 한다.(다른 것들을 모두 보여준 후에...)

}

}
}
Loading

0 comments on commit e50ffd3

Please sign in to comment.