Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Diary/Diary.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.8.3;
MARKETING_VERSION = 1.8.4;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -413,7 +413,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.8.3;
MARKETING_VERSION = 1.8.4;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -518,7 +518,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.8.3;
MARKETING_VERSION = 1.8.4;
OTHER_LDFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down
4 changes: 2 additions & 2 deletions build-logic/src/main/kotlin/BuildConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ public data object BuildConfig {
internal const val ANDROID_TARGET_SDK = 36

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

import kotlin.uuid.Uuid
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
public data class AccountMetaDataDataStoreEntity(
@SerialName("accountId")
val accountId: Uuid = Uuid.NIL,
@SerialName("profileImage")
val profileImage: String? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ import io.github.taetae98coding.diary.domain.account.repository.AccountInfoRepos
import kotlin.uuid.Uuid
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.runningFold
import org.koin.core.annotation.Factory
import org.koin.core.annotation.Provided

Expand All @@ -21,14 +19,7 @@ internal class AccountInfoRepositoryImpl(
private val supabaseAuth: SupabaseAuth,
) : AccountInfoRepository {
override fun get(): Flow<AccountInfo?> {
return supabaseAuth.sessionStatus.runningFold<SupabaseSessionStatus, SupabaseSessionStatus>(SupabaseSessionStatus.Loading) { acc, value ->
when (value) {
is SupabaseSessionStatus.Authenticated, is SupabaseSessionStatus.NotAuthenticated -> value
else -> acc
}
}.filter { status ->
status is SupabaseSessionStatus.Authenticated || status is SupabaseSessionStatus.NotAuthenticated
}.mapLatest { status ->
return supabaseAuth.sessionStatus.mapLatest { status ->
when (status) {
is SupabaseSessionStatus.Authenticated -> {
AccountInfo(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
@file:OptIn(ExperimentalCoroutinesApi::class)

package io.github.taetae98coding.diary.data.account.repository

import io.github.taetae98coding.diary.core.datastore.api.datasource.AccountMetaDataDataStoreDataSource
import io.github.taetae98coding.diary.core.mapper.toDomain
import io.github.taetae98coding.diary.core.model.account.AccountMetaData
import io.github.taetae98coding.diary.domain.account.repository.AccountMetaDataRepository
import kotlin.uuid.Uuid
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapLatest
import org.koin.core.annotation.Factory
import org.koin.core.annotation.Provided

Expand All @@ -14,7 +18,9 @@ internal class AccountMetaDataRepositoryImpl(
@param:Provided
private val accountMetaDataDataStoreDataSource: AccountMetaDataDataStoreDataSource,
) : AccountMetaDataRepository {
override fun get(): Flow<AccountMetaData?> {
return accountMetaDataDataStoreDataSource.get().map { it?.toDomain() }
override fun get(accountId: Uuid): Flow<AccountMetaData?> {
return accountMetaDataDataStoreDataSource.get()
.mapLatest { it?.takeIf { it.accountId == accountId } }
.mapLatest { it?.toDomain() }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,12 @@ public class SessionRepositoryImpl(
}

private suspend fun updateSession(sessionRemote: SessionRemoteEntity) {
accountMetaDataDataStoreDataSource.upsert(AccountMetaDataDataStoreEntity(profileImage = sessionRemote.account.profileImage))
accountMetaDataDataStoreDataSource.upsert(
AccountMetaDataDataStoreEntity(
accountId = sessionRemote.account.id,
profileImage = sessionRemote.account.profileImage,
),
)
supabaseAuth.importAuthToken(sessionRemote.accessToken, sessionRemote.refreshToken)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@ class SessionRepositoryImplTest : FunSpec() {
coVerifyOrder {
sessionRemoteDataSource.getByGoogleIdToken(idToken)
accountMetaDataDataStoreDataSource.upsert(
AccountMetaDataDataStoreEntity(profileImage = sessionRemote.account.profileImage),
AccountMetaDataDataStoreEntity(
accountId = sessionRemote.account.id,
profileImage = sessionRemote.account.profileImage,
),
)
supabaseAuth.importAuthToken(sessionRemote.accessToken, sessionRemote.refreshToken)
}
Expand All @@ -62,7 +65,10 @@ class SessionRepositoryImplTest : FunSpec() {
coVerifyOrder {
sessionRemoteDataSource.getByGoogleAuthorizationCode(clientId, code, redirectUri)
accountMetaDataDataStoreDataSource.upsert(
AccountMetaDataDataStoreEntity(profileImage = sessionRemote.account.profileImage),
AccountMetaDataDataStoreEntity(
accountId = sessionRemote.account.id,
profileImage = sessionRemote.account.profileImage,
),
)
supabaseAuth.importAuthToken(sessionRemote.accessToken, sessionRemote.refreshToken)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package io.github.taetae98coding.diary.domain.account.repository

import io.github.taetae98coding.diary.core.model.account.AccountMetaData
import kotlin.uuid.Uuid
import kotlinx.coroutines.flow.Flow

public interface AccountMetaDataRepository {
public fun get(): Flow<AccountMetaData?>
public fun get(accountId: Uuid): Flow<AccountMetaData?>
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ import io.github.taetae98coding.diary.domain.account.repository.AccountMetaDataR
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.emitAll
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.mapLatest
import org.koin.core.annotation.Factory
import org.koin.core.annotation.Provided
Expand All @@ -24,21 +25,21 @@ public class GetAccountUseCase(
) {
public operator fun invoke(): Flow<Result<Account>> {
return flow {
combine(
accountInfoRepository.get(),
accountMetaDataRepository.get(),
) { accountInfo, accountMetaData ->
if (accountInfo == null) {
Account.Guest
} else {
Account.User(
accountInfo = accountInfo,
accountMetaData = accountMetaData,
)
accountInfoRepository.get()
.flatMapLatest { accountInfo ->
if (accountInfo == null) {
flowOf(Account.Guest)
} else {
accountMetaDataRepository.get(accountInfo.id)
.mapLatest { accountMetaData ->
Account.User(
accountInfo = accountInfo,
accountMetaData = accountMetaData,
)
}
}
}
}.also {
emitAll(it)
}
.also { emitAll(it) }
}.mapLatest {
Result.success(it)
}.catch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ class GetAccountUseCaseTest : BehaviorSpec() {
clearAllMocks()

every { accountInfoRepository.get() } returns flowOf(null)
every { accountMetaDataRepository.get() } returns flowOf(null)

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

every { accountInfoRepository.get() } returns flowOf(accountInfo)
every { accountMetaDataRepository.get() } returns flowOf(accountMetaData)
every { accountMetaDataRepository.get(accountInfo.id) } returns flowOf(accountMetaData)

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

Then("AccountMetaDataRepository를 호출한다") {
verify(exactly = 1) { accountMetaDataRepository.get() }
verify(exactly = 1) { accountMetaDataRepository.get(accountInfo.id) }
}
}
}
Expand All @@ -88,7 +87,7 @@ class GetAccountUseCaseTest : BehaviorSpec() {
val accountInfo = fixtureMonkey.giveMeOne<AccountInfo>()

every { accountInfoRepository.get() } returns flowOf(accountInfo)
every { accountMetaDataRepository.get() } returns flowOf(null)
every { accountMetaDataRepository.get(accountInfo.id) } returns flowOf(null)

When("GetAccountUseCase를 호출하면") {
val result = useCase().first()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.ExperimentalFlexBoxApi
import androidx.compose.foundation.layout.FlexAlignContent
import androidx.compose.foundation.layout.FlexAlignItems
import androidx.compose.foundation.layout.FlexBox
import androidx.compose.foundation.layout.FlexJustifyContent
import androidx.compose.foundation.layout.FlexWrap
Expand Down Expand Up @@ -83,6 +84,7 @@ private fun TagFlowRow(
wrap(FlexWrap.Wrap)
gap(6.dp)
justifyContent(FlexJustifyContent.Center)
alignItems(FlexAlignItems.Center)
alignContent(FlexAlignContent.Center)
},
) {
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ firebase-perf-plugin = "2.0.2"
coil = "3.4.0" # https://github.com/coil-kt/coil/releases
koin = "4.2.1" # https://github.com/InsertKoinIO/koin/releases
koin-compiler-plugin = "1.0.0-RC2" # https://github.com/InsertKoinIO/koin-compiler-plugin/releases
fixture-monkey = "1.1.19" # https://github.com/naver/fixture-monkey/releases
fixture-monkey = "1.1.20" # https://github.com/naver/fixture-monkey/releases
google-identity = "1.2.0" # https://developers.google.com/identity/android-credential-manager/releases?hl=en
google-oauth-client = "1.39.0" # https://github.com/googleapis/google-oauth-java-client/releases
google-play-services-location = "21.3.0" # https://developers.google.com/android/guides/releases?hl=en
Expand Down