Skip to content

Commit 42d1d7a

Browse files
committed
firebase 레파지토리 생성
1 parent 29a25c1 commit 42d1d7a

File tree

10 files changed

+112
-1
lines changed

10 files changed

+112
-1
lines changed

app/build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ android {
2626
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
2727
}
2828
}
29+
composeOptions {
30+
kotlinCompilerExtensionVersion = "1.4.2"
31+
}
2932
compileOptions {
3033
sourceCompatibility JavaVersion.VERSION_1_8
3134
targetCompatibility JavaVersion.VERSION_1_8
@@ -36,6 +39,9 @@ android {
3639
viewBinding{
3740
enabled = true
3841
}
42+
buildFeatures {
43+
compose true
44+
}
3945
}
4046

4147
dependencies {
@@ -66,5 +72,6 @@ dependencies {
6672
implementation 'androidx.activity:activity-compose:1.7.2'
6773

6874
implementation "androidx.navigation:navigation-compose:2.6.0"
75+
implementation "androidx.hilt:hilt-navigation-compose:1.0.0"
6976

7077
}

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525
android:name="android.app.lib_name"
2626
android:value="" />
2727
</activity>
28+
<activity android:name=".MainActivity"/>
2829
<activity
29-
android:name="com.example.webrtc.MainActivity"
30+
android:name="com.example.webrtc.ComposeActivity"
3031
android:exported="true">
3132
<intent-filter>
3233
<action android:name="android.intent.action.MAIN" />

data/src/main/java/com/example/data/di/RepositoryModule.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.example.data.di
22

3+
import com.example.data.repository.FireStoreRepositoryImpl
34
import com.example.data.repository.SignalRepositoryImpl
45
import com.example.data.repository.WebRTCRepositoryImpl
6+
import com.example.domain.repository.FireStoreRepository
57
import com.example.domain.repository.SignalRepository
68
import com.example.domain.repository.WebRTCRepository
79
import dagger.Binds
@@ -18,4 +20,7 @@ internal abstract class RepositoryModule {
1820

1921
@Binds
2022
abstract fun bindsWebRTCRepository(webRTCRepositoryImpl: WebRTCRepositoryImpl): WebRTCRepository
23+
24+
@Binds
25+
abstract fun bindsFireStoreRepository(fireStoreRepositoryImpl: FireStoreRepositoryImpl): FireStoreRepository
2126
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.example.data.repository
2+
3+
import android.content.Intent
4+
import com.example.domain.repository.FireStoreRepository
5+
import com.google.firebase.firestore.DocumentSnapshot
6+
import com.google.firebase.firestore.FirebaseFirestore
7+
import kotlinx.coroutines.CoroutineScope
8+
import kotlinx.coroutines.Dispatchers
9+
import kotlinx.coroutines.channels.awaitClose
10+
import kotlinx.coroutines.flow.Flow
11+
import kotlinx.coroutines.flow.callbackFlow
12+
import kotlinx.coroutines.launch
13+
import javax.inject.Inject
14+
15+
class FireStoreRepositoryImpl @Inject constructor(
16+
private val firestore: FirebaseFirestore
17+
) : FireStoreRepository {
18+
override fun getRoomInfo(roomID: String): Flow<DocumentSnapshot> = callbackFlow {
19+
firestore.collection("calls")
20+
.document(roomID)
21+
.get()
22+
.addOnSuccessListener {
23+
CoroutineScope(Dispatchers.IO).launch {
24+
send(it)
25+
}
26+
}
27+
awaitClose {}
28+
}
29+
}

domain/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,7 @@ dependencies {
4646
kapt 'com.google.dagger:hilt-android-compiler:2.45'
4747

4848
implementation 'org.webrtc:google-webrtc:1.0.32006'
49+
50+
implementation platform('com.google.firebase:firebase-bom:31.0.3')
51+
implementation 'com.google.firebase:firebase-firestore-ktx'
4952
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.example.domain.repository
2+
3+
import com.google.firebase.firestore.DocumentSnapshot
4+
import kotlinx.coroutines.flow.Flow
5+
6+
interface FireStoreRepository {
7+
fun getRoomInfo(roomID: String): Flow<DocumentSnapshot>
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.domain.state
2+
3+
sealed class FireStoreState {
4+
object Idle : FireStoreState()
5+
data class EnterRoom(val isJoin: Boolean) : FireStoreState()
6+
object RoomAlreadyEnded: FireStoreState()
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.example.usecase
2+
3+
import com.example.domain.repository.FireStoreRepository
4+
import javax.inject.Inject
5+
6+
class GetRoomInfoUseCase @Inject constructor(private val fireStoreRepository: FireStoreRepository) {
7+
8+
suspend operator fun invoke(roomId: String) = fireStoreRepository.getRoomInfo(roomId)
9+
}

presentaion/build.gradle

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,25 @@ android {
2424
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
2525
}
2626
}
27+
composeOptions {
28+
kotlinCompilerExtensionVersion = "1.4.2"
29+
}
30+
buildFeatures {
31+
compose true
32+
}
2733
compileOptions {
2834
sourceCompatibility JavaVersion.VERSION_1_8
2935
targetCompatibility JavaVersion.VERSION_1_8
3036
}
3137
kotlinOptions {
3238
jvmTarget = '1.8'
3339
}
40+
viewBinding{
41+
enabled = true
42+
}
43+
dataBinding {
44+
enabled = true
45+
}
3446
}
3547

3648
dependencies {
@@ -49,6 +61,7 @@ dependencies {
4961
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
5062
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
5163
implementation 'androidx.activity:activity-ktx:1.7.2'
64+
implementation 'androidx.fragment:fragment-ktx:1.6.0'
5265
implementation 'org.webrtc:google-webrtc:1.0.32006'
5366

5467
implementation platform('com.google.firebase:firebase-bom:31.0.3')
@@ -59,4 +72,5 @@ dependencies {
5972
implementation 'androidx.compose.material:material:1.4.3'
6073
implementation 'androidx.compose.runtime:runtime:1.4.3'
6174
implementation 'androidx.activity:activity-compose:1.7.2'
75+
implementation "androidx.navigation:navigation-compose:2.6.0"
6276
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.presentaion.viewmodel
2+
3+
import androidx.lifecycle.ViewModel
4+
import androidx.lifecycle.viewModelScope
5+
import com.example.domain.state.FireStoreState
6+
import com.example.usecase.GetRoomInfoUseCase
7+
import dagger.hilt.android.lifecycle.HiltViewModel
8+
import kotlinx.coroutines.flow.MutableStateFlow
9+
import kotlinx.coroutines.flow.asStateFlow
10+
import kotlinx.coroutines.launch
11+
import javax.inject.Inject
12+
13+
@HiltViewModel
14+
class FireStoreViewModel @Inject constructor(
15+
private val getRoomInfoUseCase: GetRoomInfoUseCase
16+
) : ViewModel() {
17+
private val _state = MutableStateFlow<FireStoreState>(FireStoreState.Idle)
18+
val state = _state.asStateFlow()
19+
fun getRoomInfo(roomId: String, isJoin: Boolean) = viewModelScope.launch {
20+
getRoomInfoUseCase(roomId).collect { snapshot ->
21+
if (snapshot["type"] == "OFFER" || snapshot["type"] == "ANSWER" || snapshot["type"] == "END_CALL") {
22+
_state.emit(FireStoreState.RoomAlreadyEnded)
23+
} else {
24+
_state.emit(FireStoreState.EnterRoom(isJoin))
25+
}
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)