Skip to content

Commit 0ed4cec

Browse files
committed
✨ 앱을 지웠다가 다시 깔거나 다른 기기에서 로그인을 해도 나의 운동기록이 유지되도록 구현
1 parent 953f0ae commit 0ed4cec

File tree

9 files changed

+47
-4
lines changed

9 files changed

+47
-4
lines changed

data/src/main/java/com/whyranoid/data/account/RunningHistoryDao.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import kotlinx.coroutines.flow.Flow
99

1010
@Dao
1111
interface RunningHistoryDao {
12-
// TODO 일단 쓰기, 읽기만 해놨습니다~
13-
@Insert(onConflict = OnConflictStrategy.ABORT)
12+
@Insert(onConflict = OnConflictStrategy.REPLACE)
1413
suspend fun addRunningHistory(runningHistory: RunningHistoryEntity)
1514

1615
@Query("SELECT * FROM running_history ORDER BY started_at ASC")

data/src/main/java/com/whyranoid/data/model/RunningHistoryResponse.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,13 @@ fun RunningHistory.toRunningHistoryResponse(uid: String) =
2222
pace = pace,
2323
totalDistance = totalDistance
2424
)
25+
26+
fun RunningHistoryResponse.toRunningHistoryEntity() =
27+
RunningHistoryEntity(
28+
historyId = historyId,
29+
startedAt = startedAt,
30+
finishedAt = finishedAt,
31+
totalRunningTime = totalRunningTime,
32+
pace = pace,
33+
totalDistance = totalDistance
34+
)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.whyranoid
2+
3+
import javax.inject.Inject
4+
5+
class RestoreRunningHistoryDataUseCase @Inject constructor(private val signInRepository: SignInRepository) {
6+
suspend operator fun invoke(uid: String): Result<Boolean> {
7+
return signInRepository.restoreRunningHistoryData(uid)
8+
}
9+
}

signin/src/main/java/com/whyranoid/SignInDataSource.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ package com.whyranoid
22

33
interface SignInDataSource {
44
suspend fun saveLogInUserInfo(userInfo: SignInUserInfo): Boolean
5+
suspend fun restoreRunningHistoryData(uid: String): Result<Boolean>
56
}

signin/src/main/java/com/whyranoid/SignInDataSourceImpl.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ import androidx.datastore.preferences.core.Preferences
55
import androidx.datastore.preferences.core.edit
66
import androidx.datastore.preferences.core.stringPreferencesKey
77
import com.google.firebase.firestore.FirebaseFirestore
8+
import com.whyranoid.data.account.RunningHistoryDao
9+
import com.whyranoid.data.model.RunningHistoryResponse
810
import com.whyranoid.data.model.UserResponse
11+
import com.whyranoid.data.model.toRunningHistoryEntity
12+
import kotlinx.coroutines.tasks.await
913
import javax.inject.Inject
1014

1115
class SignInDataSourceImpl @Inject constructor(
1216
private val dataStoreDb: DataStore<Preferences>,
13-
private val fireBaseDb: FirebaseFirestore
17+
private val fireBaseDb: FirebaseFirestore,
18+
private val runningHistoryDao: RunningHistoryDao
1419
) : SignInDataSource {
1520

1621
private object PreferenceKeys {
@@ -41,6 +46,14 @@ class SignInDataSourceImpl @Inject constructor(
4146
return true
4247
}
4348

49+
override suspend fun restoreRunningHistoryData(uid: String): Result<Boolean> = runCatching {
50+
val runningHistoryData = fireBaseDb.collection("RunningHistory").whereEqualTo("uid", uid).get().await()
51+
runningHistoryData.forEach { runningHistory ->
52+
runningHistoryDao.addRunningHistory(runningHistory.toObject(RunningHistoryResponse::class.java).toRunningHistoryEntity())
53+
}
54+
true
55+
}
56+
4457
companion object {
4558
private const val UID_KEY = "uid"
4659
private const val EMAIL_KEY = "email"

signin/src/main/java/com/whyranoid/SignInRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ package com.whyranoid
22

33
interface SignInRepository {
44
suspend fun saveLogInUserInfo(userInfo: SignInUserInfo): Boolean
5+
suspend fun restoreRunningHistoryData(uid: String): Result<Boolean>
56
}

signin/src/main/java/com/whyranoid/SignInRepositoryImpl.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,8 @@ class SignInRepositoryImpl @Inject constructor(private val signInDataSource: Sig
88
override suspend fun saveLogInUserInfo(userInfo: SignInUserInfo): Boolean {
99
return signInDataSource.saveLogInUserInfo(userInfo)
1010
}
11+
12+
override suspend fun restoreRunningHistoryData(uid: String): Result<Boolean> {
13+
return signInDataSource.restoreRunningHistoryData(uid)
14+
}
1115
}

signin/src/main/java/com/whyranoid/SignInViewModel.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ import javax.inject.Inject
66

77
@HiltViewModel
88
class SignInViewModel @Inject constructor(
9-
private val saveLogInUserInfoUseCase: SaveLogInUserInfoUseCase
9+
private val saveLogInUserInfoUseCase: SaveLogInUserInfoUseCase,
10+
private val restoreRunningHistoryDataUseCase: RestoreRunningHistoryDataUseCase
1011
) : ViewModel() {
1112
suspend fun saveUserInfo(userInfo: SignInUserInfo) {
1213
saveLogInUserInfoUseCase(userInfo)
1314
}
15+
16+
suspend fun restoreRunningHistoryData(uid: String) {
17+
restoreRunningHistoryDataUseCase(uid)
18+
}
1419
}

signin/src/main/java/com/whyranoid/signin/SignInActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class SignInActivity : AppCompatActivity() {
126126
lifecycleScope.launch {
127127
uid?.let { uid ->
128128
viewModel.saveUserInfo(SignInUserInfo(uid, email, nickName, profileImgUri))
129+
viewModel.restoreRunningHistoryData(uid)
129130
}
130131
}
131132

0 commit comments

Comments
 (0)