Skip to content

Commit 5dce97e

Browse files
authored
πŸ”€ #82 from boostcampwm-2022/feat/login_other_device
앱을 μ‚­μ œν–ˆλ‹€κ°€ λ‹€μ‹œ κΉ”κ±°λ‚˜ λ‹€λ₯Έ λ””λ°”μ΄μŠ€μ—μ„œ λ‘œκ·ΈμΈν•  λ•Œ 정보가 μœ μ§€λ˜λ„λ‘ μˆ˜μ •
2 parents 12d89cc + 5ceb73e commit 5dce97e

File tree

14 files changed

+90
-26
lines changed

14 files changed

+90
-26
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/account/RunningHistoryRemoteDataSource.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ import com.whyranoid.domain.model.RunningHistory
44

55
interface RunningHistoryRemoteDataSource {
66

7-
suspend fun uploadRunningHistory(runningHistory: RunningHistory): Result<Boolean>
7+
suspend fun uploadRunningHistory(uid: String, runningHistory: RunningHistory): Result<Boolean>
88
}

β€Ždata/src/main/java/com/whyranoid/data/account/RunningHistoryRemoteDataSourceImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import javax.inject.Inject
1111

1212
class RunningHistoryRemoteDataSourceImpl @Inject constructor(private val firebaseDB: FirebaseFirestore) :
1313
RunningHistoryRemoteDataSource {
14-
override suspend fun uploadRunningHistory(runningHistory: RunningHistory): Result<Boolean> {
15-
val runningHistoryResponse = runningHistory.toRunningHistoryResponse()
14+
override suspend fun uploadRunningHistory(uid: String, runningHistory: RunningHistory): Result<Boolean> {
15+
val runningHistoryResponse = runningHistory.toRunningHistoryResponse(uid)
1616
var uploadSuccess = false
1717

1818
return runCatching {

β€Ždata/src/main/java/com/whyranoid/data/account/RunningHistoryRepositoryImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class RunningHistoryRepositoryImpl @Inject constructor(
3838
)
3939
}
4040

41-
override suspend fun uploadRunningHistory(runningHistory: RunningHistory): Result<Boolean> {
42-
return runningHistoryRemoteDataSource.uploadRunningHistory(runningHistory)
41+
override suspend fun uploadRunningHistory(uid: String, runningHistory: RunningHistory): Result<Boolean> {
42+
return runningHistoryRemoteDataSource.uploadRunningHistory(uid, runningHistory)
4343
}
4444
}

β€Ždata/src/main/java/com/whyranoid/data/model/RunningHistoryResponse.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.whyranoid.data.model
33
import com.whyranoid.domain.model.RunningHistory
44

55
data class RunningHistoryResponse(
6+
val uid: String = "",
67
val historyId: String = "",
78
val startedAt: Long = 0L,
89
val finishedAt: Long = 0L,
@@ -11,8 +12,19 @@ data class RunningHistoryResponse(
1112
val totalDistance: Double = 0.0
1213
)
1314

14-
fun RunningHistory.toRunningHistoryResponse() =
15+
fun RunningHistory.toRunningHistoryResponse(uid: String) =
1516
RunningHistoryResponse(
17+
uid = uid,
18+
historyId = historyId,
19+
startedAt = startedAt,
20+
finishedAt = finishedAt,
21+
totalRunningTime = totalRunningTime,
22+
pace = pace,
23+
totalDistance = totalDistance
24+
)
25+
26+
fun RunningHistoryResponse.toRunningHistoryEntity() =
27+
RunningHistoryEntity(
1628
historyId = historyId,
1729
startedAt = startedAt,
1830
finishedAt = finishedAt,

β€Ždomain/src/main/java/com/whyranoid/domain/repository/RunningHistoryRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ interface RunningHistoryRepository {
2121
totalDistance: Double
2222
): Result<RunningHistory>
2323

24-
suspend fun uploadRunningHistory(runningHistory: RunningHistory): Result<Boolean>
24+
suspend fun uploadRunningHistory(uid: String, runningHistory: RunningHistory): Result<Boolean>
2525
}

β€Ždomain/src/main/java/com/whyranoid/domain/usecase/FinishRunningUseCase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class FinishRunningUseCase @Inject constructor(
1919
runnerRepository.finishRunning(uid)
2020

2121
if (runningHistory != null) {
22-
val uploadResult = runningHistoryRepository.uploadRunningHistory(runningHistory)
22+
val uploadResult = runningHistoryRepository.uploadRunningHistory(uid, runningHistory)
2323

2424
if (uploadResult.isFailure) {
2525
return false
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: 47 additions & 15 deletions
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 {
@@ -21,32 +26,59 @@ class SignInDataSourceImpl @Inject constructor(
2126
}
2227

2328
override suspend fun saveLogInUserInfo(userInfo: SignInUserInfo): Boolean {
24-
dataStoreDb.edit { preferences ->
25-
preferences[PreferenceKeys.uid] = userInfo.uid
26-
preferences[PreferenceKeys.email] = userInfo.email ?: EMPTY_STRING
27-
preferences[PreferenceKeys.nickName] = userInfo.nickName ?: EMPTY_STRING
28-
preferences[PreferenceKeys.profileImgUri] = userInfo.profileImgUri ?: EMPTY_STRING
29-
}
29+
val existedUser =
30+
fireBaseDb.collection(USER_COLLECTION_PATH).document(userInfo.uid).get().await()
31+
val existedUserInfo = existedUser.toObject(UserResponse::class.java)
32+
33+
if (existedUserInfo == null) {
34+
dataStoreDb.edit { preferences ->
35+
preferences[PreferenceKeys.uid] = userInfo.uid
36+
preferences[PreferenceKeys.email] = userInfo.email ?: EMPTY_STRING
37+
preferences[PreferenceKeys.nickName] = userInfo.nickName ?: EMPTY_STRING
38+
preferences[PreferenceKeys.profileImgUri] = userInfo.profileImgUri ?: EMPTY_STRING
39+
}
3040

31-
fireBaseDb.collection(USER_COLLECTION_PATH)
32-
.document(userInfo.uid).set(
33-
UserResponse(
34-
userInfo.uid,
35-
userInfo.nickName,
36-
userInfo.profileImgUri,
37-
emptyList()
41+
fireBaseDb.collection(USER_COLLECTION_PATH)
42+
.document(userInfo.uid).set(
43+
UserResponse(
44+
userInfo.uid,
45+
userInfo.nickName,
46+
userInfo.profileImgUri,
47+
emptyList()
48+
)
3849
)
39-
)
50+
} else {
51+
dataStoreDb.edit { preferences ->
52+
preferences[PreferenceKeys.uid] = existedUserInfo.uid
53+
preferences[PreferenceKeys.email] = userInfo.email ?: EMPTY_STRING
54+
preferences[PreferenceKeys.nickName] = existedUserInfo.name ?: EMPTY_STRING
55+
preferences[PreferenceKeys.profileImgUri] =
56+
existedUserInfo.profileUrl ?: EMPTY_STRING
57+
}
58+
}
4059

4160
return true
4261
}
4362

63+
override suspend fun restoreRunningHistoryData(uid: String): Result<Boolean> = runCatching {
64+
val runningHistoryData =
65+
fireBaseDb.collection(RUNNING_HISTORY_COLLECTION_PATH).whereEqualTo(UID_KEY, uid).get()
66+
.await()
67+
runningHistoryData.forEach { runningHistory ->
68+
runningHistoryDao.addRunningHistory(
69+
runningHistory.toObject(RunningHistoryResponse::class.java).toRunningHistoryEntity()
70+
)
71+
}
72+
true
73+
}
74+
4475
companion object {
4576
private const val UID_KEY = "uid"
4677
private const val EMAIL_KEY = "email"
4778
private const val NICK_NAME_KEY = "nick_name"
4879
private const val PROFILE_IMG_URI = "profile_img_uri"
4980
private const val EMPTY_STRING = ""
5081
private const val USER_COLLECTION_PATH = "Users"
82+
private const val RUNNING_HISTORY_COLLECTION_PATH = "RunningHistory"
5183
}
5284
}

0 commit comments

Comments
Β (0)