Skip to content

Commit 6014d8f

Browse files
authored
๐Ÿ”€ #32 from boostcampwm-2022/feat/calendar
๋กœ๊ทธ์ธ ์‹œ ๋ฆฌ๋ชจํŠธ์— ์ •๋ณด ์ €์žฅ, ๋งˆ์ด๋Ÿฐ์—์„œ ๋‚ด ์ •๋ณด ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋ฐ ๋‹‰๋„ค์ž„ ์ˆ˜์ • ๊ตฌํ˜„
2 parents bdf7b19 + 8f2828e commit 6014d8f

File tree

26 files changed

+454
-146
lines changed

26 files changed

+454
-146
lines changed

โ€Žapp/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
android:name=".MogakrunApplication"
1515
tools:targetApi="31">
1616
<activity
17-
android:name="com.whyranoid.presentation.MainActivity"
18-
android:theme="@style/Theme.MoGakRun"
17+
android:name="com.whyranoid.signin.SignInActivity"
18+
android:theme="@style/Theme.MoGakRun.Splash"
1919
android:exported="true">
2020
<intent-filter>
2121
<action android:name="android.intent.action.MAIN" />

โ€Žbuild.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ buildscript {
2626
shimmerVersion = "0.5.0"
2727
desugarVersion = "2.0.0"
2828
calendarVersion = "1.0.4"
29+
glideVersion = "4.14.2"
2930
}
3031
dependencies {
3132
classpath "com.google.gms:google-services:$googleServiceVersion"

โ€Ždata/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,8 @@ dependencies {
4848
// Hilt
4949
implementation "com.google.dagger:hilt-android:$hiltVersion"
5050
kapt "com.google.dagger:hilt-android-compiler:$hiltVersion"
51+
52+
// datastore
53+
implementation "androidx.datastore:datastore-preferences:$dataStoreVersion"
54+
implementation "androidx.datastore:datastore-preferences-core:$dataStoreVersion"
5155
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.whyranoid.data.account
2+
3+
import kotlinx.coroutines.flow.Flow
4+
5+
interface AccountDataSource {
6+
fun getUserNickName(): Flow<String>
7+
fun getUserProfileImgUri(): Flow<String>
8+
suspend fun updateUserNickName(newNickName: String): Result<String>
9+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.whyranoid.data.account
2+
3+
import androidx.datastore.core.DataStore
4+
import androidx.datastore.preferences.core.Preferences
5+
import androidx.datastore.preferences.core.edit
6+
import androidx.datastore.preferences.core.stringPreferencesKey
7+
import com.google.firebase.firestore.FirebaseFirestore
8+
import com.whyranoid.data.account.AccountDataSourceImpl.PreferenceKeys.nickName
9+
import com.whyranoid.data.account.AccountDataSourceImpl.PreferenceKeys.profileImgUri
10+
import com.whyranoid.data.account.AccountDataSourceImpl.PreferenceKeys.uid
11+
import kotlinx.coroutines.CoroutineScope
12+
import kotlinx.coroutines.Dispatchers
13+
import kotlinx.coroutines.flow.launchIn
14+
import kotlinx.coroutines.flow.map
15+
import kotlinx.coroutines.flow.onEach
16+
import javax.inject.Inject
17+
18+
class AccountDataSourceImpl @Inject constructor(
19+
private val dataStoreDb: DataStore<Preferences>,
20+
private val fireBaseDb: FirebaseFirestore
21+
) : AccountDataSource {
22+
23+
init {
24+
getUid()
25+
}
26+
27+
private var userUid = EMPTY_STRING
28+
29+
private object PreferenceKeys {
30+
val uid = stringPreferencesKey(UID_KEY)
31+
val email = stringPreferencesKey(EMAIL_KEY)
32+
val nickName = stringPreferencesKey(NICK_NAME_KEY)
33+
val profileImgUri = stringPreferencesKey(PROFILE_IMG_URI)
34+
}
35+
36+
// TODO : flow -> suspend๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ.
37+
override fun getUserNickName() = dataStoreDb.data
38+
.map { preferences ->
39+
preferences[nickName] ?: EMPTY_STRING
40+
}
41+
42+
// TODO : flow -> suspend๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ.
43+
override fun getUserProfileImgUri() = dataStoreDb.data
44+
.map { preferences ->
45+
preferences[profileImgUri] ?: EMPTY_STRING
46+
}
47+
48+
// TODO : flow -> suspend๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ.
49+
private fun getUid() = dataStoreDb.data
50+
.map { preferences ->
51+
preferences[uid]
52+
}.onEach {
53+
userUid = it ?: EMPTY_STRING
54+
}.launchIn(CoroutineScope(Dispatchers.IO))
55+
56+
override suspend fun updateUserNickName(newNickName: String) = runCatching {
57+
// ๋กœ์ปฌ์— ์—…๋ฐ์ดํŠธ
58+
dataStoreDb.edit { preferences ->
59+
preferences[nickName] = newNickName
60+
}
61+
62+
// ๋ฆฌ๋ชจํŠธ์— ์—…๋ฐ์ดํŠธ
63+
fireBaseDb.collection(USER_COLLECTION_PATH)
64+
.document(userUid).update(USER_FIELD_NICK_NAME, newNickName)
65+
66+
newNickName
67+
}
68+
69+
companion object {
70+
private const val UID_KEY = "uid"
71+
private const val EMAIL_KEY = "email"
72+
private const val NICK_NAME_KEY = "nick_name"
73+
private const val PROFILE_IMG_URI = "profile_img_uri"
74+
private const val EMPTY_STRING = ""
75+
private const val USER_COLLECTION_PATH = "Users"
76+
private const val USER_FIELD_NICK_NAME = "name"
77+
}
78+
}

โ€Ždata/src/main/java/com/whyranoid/data/account/AccountRepositoryImpl.kt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ package com.whyranoid.data.account
22

33
import com.whyranoid.domain.model.User
44
import com.whyranoid.domain.repository.AccountRepository
5+
import kotlinx.coroutines.flow.Flow
56
import javax.inject.Inject
67

78
// TODO AccountRepositoryImpl ์žฌ๊ตฌํ˜„ ํ•„์š”!! ํ˜„์žฌ๋Š” Fake ์ƒํƒœ
8-
class AccountRepositoryImpl @Inject constructor() : AccountRepository {
9+
class AccountRepositoryImpl @Inject constructor(
10+
private val accountDataSource: AccountDataSource
11+
) : AccountRepository {
912
override suspend fun getUser(): Result<User> {
1013
return Result.success(User("byeonghee-uid", "๋ณ‘ํฌ", "github.com/bngsh"))
1114
}
@@ -18,16 +21,16 @@ class AccountRepositoryImpl @Inject constructor() : AccountRepository {
1821
return Result.success("byeonghee-uid")
1922
}
2023

21-
override suspend fun getNickname(): Result<String> {
22-
return Result.success("๋ณ‘ํฌ")
24+
override suspend fun getNickname(): Flow<String> {
25+
return accountDataSource.getUserNickName()
2326
}
2427

25-
override suspend fun updateNickname(newNickname: String): Boolean {
26-
return true
28+
override suspend fun updateNickname(newNickName: String): Result<String> {
29+
return accountDataSource.updateUserNickName(newNickName)
2730
}
2831

29-
override suspend fun getProfileUrl(): Result<String> {
30-
return Result.success("github.com/bngsh")
32+
override suspend fun getProfileUri(): Flow<String> {
33+
return accountDataSource.getUserProfileImgUri()
3134
}
3235

3336
override suspend fun updateProfileUrl(newProfileUrl: String): Boolean {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,45 @@
11
package com.whyranoid.data.di
22

3+
import android.content.Context
4+
import androidx.datastore.core.DataStore
5+
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
6+
import androidx.datastore.preferences.core.Preferences
7+
import androidx.datastore.preferences.preferencesDataStoreFile
8+
import com.whyranoid.data.account.AccountDataSource
9+
import com.whyranoid.data.account.AccountDataSourceImpl
310
import com.whyranoid.data.account.AccountRepositoryImpl
411
import com.whyranoid.domain.repository.AccountRepository
512
import dagger.Binds
613
import dagger.Module
14+
import dagger.Provides
715
import dagger.hilt.InstallIn
16+
import dagger.hilt.android.qualifiers.ApplicationContext
817
import dagger.hilt.components.SingletonComponent
18+
import javax.inject.Singleton
19+
20+
private const val USER_PREFERENCES = "user_preferences"
21+
22+
@Module
23+
@InstallIn(SingletonComponent::class)
24+
object DataStoreModule {
25+
26+
@Singleton
27+
@Provides
28+
fun providePreferencesDataStore(@ApplicationContext appContext: Context): DataStore<Preferences> =
29+
PreferenceDataStoreFactory.create(
30+
produceFile = {
31+
appContext.preferencesDataStoreFile(USER_PREFERENCES)
32+
}
33+
)
34+
}
935

1036
@Module
1137
@InstallIn(SingletonComponent::class)
1238
abstract class AccountModule {
1339

1440
@Binds
1541
abstract fun bindAccountRepository(accountRepositoryImpl: AccountRepositoryImpl): AccountRepository
42+
43+
@Binds
44+
abstract fun bindAccountDataSource(accountDataSourceImpl: AccountDataSourceImpl): AccountDataSource
1645
}

โ€Ždata/src/main/java/com/whyranoid/data/model/UserResponse.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import com.whyranoid.domain.model.User
66

77
data class UserResponse(
88
val uid: String = "",
9-
val name: String = "",
10-
val profileUrl: String = "",
9+
val name: String? = "",
10+
val profileUrl: String? = "",
1111
val joinedGroupList: List<String> = emptyList()
1212
)
1313

โ€Ždomain/src/main/java/com/whyranoid/domain/model/User.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package com.whyranoid.domain.model
22

33
data class User(
44
val uid: String,
5-
val name: String,
6-
val profileUrl: String
5+
val name: String?,
6+
val profileUrl: String?
77
)

โ€Ždomain/src/main/java/com/whyranoid/domain/repository/AccountRepository.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.whyranoid.domain.repository
22

33
import com.whyranoid.domain.model.User
4+
import kotlinx.coroutines.flow.Flow
45

56
interface AccountRepository {
67

@@ -14,14 +15,14 @@ interface AccountRepository {
1415
suspend fun getUid(): Result<String>
1516

1617
// ๋ฐ์ดํ„ฐ์Šคํ† ์–ด์—์„œ ๋‹‰๋„ค์ž„ ๊ฐ€์ ธ์˜ค๊ธฐ
17-
suspend fun getNickname(): Result<String>
18+
suspend fun getNickname(): Flow<String>
1819

1920
// ๋‹‰๋„ค์ž„ ์ˆ˜์ •, ์„œ๋ฒ„์— ๋จผ์ € ๋ณด๋‚ด๊ณ  ์„ฑ๊ณตํ•˜๋ฉด ๋กœ์ปฌ์— ๋ฐ˜์˜
2021
// ์‹คํŒจํ•˜๋ฉด ์‹คํŒจ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๊ธฐ
21-
suspend fun updateNickname(newNickname: String): Boolean
22+
suspend fun updateNickname(newNickName: String): Result<String>
2223

2324
// ๋ฐ์ดํ„ฐ์Šคํ† ์–ด์—์„œ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ
24-
suspend fun getProfileUrl(): Result<String>
25+
suspend fun getProfileUri(): Flow<String>
2526

2627
// ํ”„๋กœํ•„ ์‚ฌ์ง„ ์„œ๋ฒ„์— ์—…๋ฐ์ดํŠธ
2728
suspend fun updateProfileUrl(newProfileUrl: String): Boolean

0 commit comments

Comments
ย (0)