Skip to content

Commit a1fe384

Browse files
Merge pull request #12 from taetae98coding/develop
1.8.4
2 parents 8242169 + 45a5200 commit a1fe384

12 files changed

Lines changed: 56 additions & 42 deletions

File tree

Diary/Diary.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@
315315
"$(inherited)",
316316
"@executable_path/Frameworks",
317317
);
318-
MARKETING_VERSION = 1.8.3;
318+
MARKETING_VERSION = 1.8.4;
319319
OTHER_LDFLAGS = "";
320320
PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary.dev;
321321
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -413,7 +413,7 @@
413413
"$(inherited)",
414414
"@executable_path/Frameworks",
415415
);
416-
MARKETING_VERSION = 1.8.3;
416+
MARKETING_VERSION = 1.8.4;
417417
OTHER_LDFLAGS = "";
418418
PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary;
419419
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -518,7 +518,7 @@
518518
"$(inherited)",
519519
"@executable_path/Frameworks",
520520
);
521-
MARKETING_VERSION = 1.8.3;
521+
MARKETING_VERSION = 1.8.4;
522522
OTHER_LDFLAGS = "";
523523
PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary;
524524
PRODUCT_NAME = "$(TARGET_NAME)";

build-logic/src/main/kotlin/BuildConfig.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ public data object BuildConfig {
44
internal const val ANDROID_TARGET_SDK = 36
55

66
public const val NAMESPACE: String = "io.github.taetae98coding.diary"
7-
public const val VERSION_NAME: String = "1.8.3"
8-
public const val VERSION_CODE: Int = 12
7+
public const val VERSION_NAME: String = "1.8.4"
8+
public const val VERSION_CODE: Int = 13
99
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package io.github.taetae98coding.diary.core.datastore.api.entity
22

3+
import kotlin.uuid.Uuid
34
import kotlinx.serialization.SerialName
45
import kotlinx.serialization.Serializable
56

67
@Serializable
78
public data class AccountMetaDataDataStoreEntity(
9+
@SerialName("accountId")
10+
val accountId: Uuid = Uuid.NIL,
811
@SerialName("profileImage")
912
val profileImage: String? = null,
1013
)

data/account/src/commonMain/kotlin/io/github/taetae98coding/diary/data/account/repository/AccountInfoRepositoryImpl.kt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import io.github.taetae98coding.diary.domain.account.repository.AccountInfoRepos
99
import kotlin.uuid.Uuid
1010
import kotlinx.coroutines.ExperimentalCoroutinesApi
1111
import kotlinx.coroutines.flow.Flow
12-
import kotlinx.coroutines.flow.filter
1312
import kotlinx.coroutines.flow.mapLatest
14-
import kotlinx.coroutines.flow.runningFold
1513
import org.koin.core.annotation.Factory
1614
import org.koin.core.annotation.Provided
1715

@@ -21,14 +19,7 @@ internal class AccountInfoRepositoryImpl(
2119
private val supabaseAuth: SupabaseAuth,
2220
) : AccountInfoRepository {
2321
override fun get(): Flow<AccountInfo?> {
24-
return supabaseAuth.sessionStatus.runningFold<SupabaseSessionStatus, SupabaseSessionStatus>(SupabaseSessionStatus.Loading) { acc, value ->
25-
when (value) {
26-
is SupabaseSessionStatus.Authenticated, is SupabaseSessionStatus.NotAuthenticated -> value
27-
else -> acc
28-
}
29-
}.filter { status ->
30-
status is SupabaseSessionStatus.Authenticated || status is SupabaseSessionStatus.NotAuthenticated
31-
}.mapLatest { status ->
22+
return supabaseAuth.sessionStatus.mapLatest { status ->
3223
when (status) {
3324
is SupabaseSessionStatus.Authenticated -> {
3425
AccountInfo(
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1+
@file:OptIn(ExperimentalCoroutinesApi::class)
2+
13
package io.github.taetae98coding.diary.data.account.repository
24

35
import io.github.taetae98coding.diary.core.datastore.api.datasource.AccountMetaDataDataStoreDataSource
46
import io.github.taetae98coding.diary.core.mapper.toDomain
57
import io.github.taetae98coding.diary.core.model.account.AccountMetaData
68
import io.github.taetae98coding.diary.domain.account.repository.AccountMetaDataRepository
9+
import kotlin.uuid.Uuid
10+
import kotlinx.coroutines.ExperimentalCoroutinesApi
711
import kotlinx.coroutines.flow.Flow
8-
import kotlinx.coroutines.flow.map
12+
import kotlinx.coroutines.flow.mapLatest
913
import org.koin.core.annotation.Factory
1014
import org.koin.core.annotation.Provided
1115

@@ -14,7 +18,9 @@ internal class AccountMetaDataRepositoryImpl(
1418
@param:Provided
1519
private val accountMetaDataDataStoreDataSource: AccountMetaDataDataStoreDataSource,
1620
) : AccountMetaDataRepository {
17-
override fun get(): Flow<AccountMetaData?> {
18-
return accountMetaDataDataStoreDataSource.get().map { it?.toDomain() }
21+
override fun get(accountId: Uuid): Flow<AccountMetaData?> {
22+
return accountMetaDataDataStoreDataSource.get()
23+
.mapLatest { it?.takeIf { it.accountId == accountId } }
24+
.mapLatest { it?.toDomain() }
1925
}
2026
}

data/credentials/src/commonMain/kotlin/io/github/taetae98coding/diary/data/credentials/repository/SessionRepositoryImpl.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ public class SessionRepositoryImpl(
3737
}
3838

3939
private suspend fun updateSession(sessionRemote: SessionRemoteEntity) {
40-
accountMetaDataDataStoreDataSource.upsert(AccountMetaDataDataStoreEntity(profileImage = sessionRemote.account.profileImage))
40+
accountMetaDataDataStoreDataSource.upsert(
41+
AccountMetaDataDataStoreEntity(
42+
accountId = sessionRemote.account.id,
43+
profileImage = sessionRemote.account.profileImage,
44+
),
45+
)
4146
supabaseAuth.importAuthToken(sessionRemote.accessToken, sessionRemote.refreshToken)
4247
}
4348
}

data/credentials/src/jvmTest/kotlin/io/github/taetae98coding/diary/data/credentials/repository/SessionRepositoryImplTest.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ class SessionRepositoryImplTest : FunSpec() {
4343
coVerifyOrder {
4444
sessionRemoteDataSource.getByGoogleIdToken(idToken)
4545
accountMetaDataDataStoreDataSource.upsert(
46-
AccountMetaDataDataStoreEntity(profileImage = sessionRemote.account.profileImage),
46+
AccountMetaDataDataStoreEntity(
47+
accountId = sessionRemote.account.id,
48+
profileImage = sessionRemote.account.profileImage,
49+
),
4750
)
4851
supabaseAuth.importAuthToken(sessionRemote.accessToken, sessionRemote.refreshToken)
4952
}
@@ -62,7 +65,10 @@ class SessionRepositoryImplTest : FunSpec() {
6265
coVerifyOrder {
6366
sessionRemoteDataSource.getByGoogleAuthorizationCode(clientId, code, redirectUri)
6467
accountMetaDataDataStoreDataSource.upsert(
65-
AccountMetaDataDataStoreEntity(profileImage = sessionRemote.account.profileImage),
68+
AccountMetaDataDataStoreEntity(
69+
accountId = sessionRemote.account.id,
70+
profileImage = sessionRemote.account.profileImage,
71+
),
6672
)
6773
supabaseAuth.importAuthToken(sessionRemote.accessToken, sessionRemote.refreshToken)
6874
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package io.github.taetae98coding.diary.domain.account.repository
22

33
import io.github.taetae98coding.diary.core.model.account.AccountMetaData
4+
import kotlin.uuid.Uuid
45
import kotlinx.coroutines.flow.Flow
56

67
public interface AccountMetaDataRepository {
7-
public fun get(): Flow<AccountMetaData?>
8+
public fun get(accountId: Uuid): Flow<AccountMetaData?>
89
}

domain/account/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/account/usecase/GetAccountUseCase.kt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import io.github.taetae98coding.diary.domain.account.repository.AccountMetaDataR
88
import kotlinx.coroutines.ExperimentalCoroutinesApi
99
import kotlinx.coroutines.flow.Flow
1010
import kotlinx.coroutines.flow.catch
11-
import kotlinx.coroutines.flow.combine
1211
import kotlinx.coroutines.flow.emitAll
12+
import kotlinx.coroutines.flow.flatMapLatest
1313
import kotlinx.coroutines.flow.flow
14+
import kotlinx.coroutines.flow.flowOf
1415
import kotlinx.coroutines.flow.mapLatest
1516
import org.koin.core.annotation.Factory
1617
import org.koin.core.annotation.Provided
@@ -24,21 +25,21 @@ public class GetAccountUseCase(
2425
) {
2526
public operator fun invoke(): Flow<Result<Account>> {
2627
return flow {
27-
combine(
28-
accountInfoRepository.get(),
29-
accountMetaDataRepository.get(),
30-
) { accountInfo, accountMetaData ->
31-
if (accountInfo == null) {
32-
Account.Guest
33-
} else {
34-
Account.User(
35-
accountInfo = accountInfo,
36-
accountMetaData = accountMetaData,
37-
)
28+
accountInfoRepository.get()
29+
.flatMapLatest { accountInfo ->
30+
if (accountInfo == null) {
31+
flowOf(Account.Guest)
32+
} else {
33+
accountMetaDataRepository.get(accountInfo.id)
34+
.mapLatest { accountMetaData ->
35+
Account.User(
36+
accountInfo = accountInfo,
37+
accountMetaData = accountMetaData,
38+
)
39+
}
40+
}
3841
}
39-
}.also {
40-
emitAll(it)
41-
}
42+
.also { emitAll(it) }
4243
}.mapLatest {
4344
Result.success(it)
4445
}.catch {

domain/account/src/jvmTest/kotlin/io/github/taetae98coding/diary/domain/account/usecase/GetAccountUseCaseTest.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ class GetAccountUseCaseTest : BehaviorSpec() {
3535
clearAllMocks()
3636

3737
every { accountInfoRepository.get() } returns flowOf(null)
38-
every { accountMetaDataRepository.get() } returns flowOf(null)
3938

4039
When("GetAccountUseCase를 호출하면") {
4140
val result = useCase().first()
@@ -59,7 +58,7 @@ class GetAccountUseCaseTest : BehaviorSpec() {
5958
.sample()
6059

6160
every { accountInfoRepository.get() } returns flowOf(accountInfo)
62-
every { accountMetaDataRepository.get() } returns flowOf(accountMetaData)
61+
every { accountMetaDataRepository.get(accountInfo.id) } returns flowOf(accountMetaData)
6362

6463
When("GetAccountUseCase를 호출하면") {
6564
val result = useCase().first()
@@ -78,7 +77,7 @@ class GetAccountUseCaseTest : BehaviorSpec() {
7877
}
7978

8079
Then("AccountMetaDataRepository를 호출한다") {
81-
verify(exactly = 1) { accountMetaDataRepository.get() }
80+
verify(exactly = 1) { accountMetaDataRepository.get(accountInfo.id) }
8281
}
8382
}
8483
}
@@ -88,7 +87,7 @@ class GetAccountUseCaseTest : BehaviorSpec() {
8887
val accountInfo = fixtureMonkey.giveMeOne<AccountInfo>()
8988

9089
every { accountInfoRepository.get() } returns flowOf(accountInfo)
91-
every { accountMetaDataRepository.get() } returns flowOf(null)
90+
every { accountMetaDataRepository.get(accountInfo.id) } returns flowOf(null)
9291

9392
When("GetAccountUseCase를 호출하면") {
9493
val result = useCase().first()

0 commit comments

Comments
 (0)