diff --git a/app/src/main/java/com/prodhack/moscow2025/data/data_providers/api/ApiKtorClient.kt b/app/src/main/java/com/prodhack/moscow2025/data/data_providers/api/ApiKtorClient.kt index b92afd5..686d53f 100644 --- a/app/src/main/java/com/prodhack/moscow2025/data/data_providers/api/ApiKtorClient.kt +++ b/app/src/main/java/com/prodhack/moscow2025/data/data_providers/api/ApiKtorClient.kt @@ -62,7 +62,7 @@ class ApiKtorClient(authorizationDataStore: AuthorizationDataStore) { loadTokens { return@loadTokens authorizationDataStore.token.first() .toBearerTokens().also { - Log.d("csmlc", it.accessToken) + Log.d("ApiKtorClient", it.accessToken) } } refreshTokens { @@ -76,6 +76,27 @@ class ApiKtorClient(authorizationDataStore: AuthorizationDataStore) { } } + val authClient = HttpClient(OkHttp) { + install(Logging) { + logger = Logger.ANDROID + level = LogLevel.ALL + } + install(HttpRequestRetry) { + retryOnServerErrors(maxRetries = 3) + exponentialDelay() + } + install(ContentNegotiation) { + json(Json { + prettyPrint = true + isLenient = true + ignoreUnknownKeys = true + }) + } + defaultRequest { + url(Constants.BASE_API_URL) + } + } + private fun String.toBearerTokens(): BearerTokens { return BearerTokens(this, null) } diff --git a/app/src/main/java/com/prodhack/moscow2025/data/repImplementations/AuthRepositoryImpl.kt b/app/src/main/java/com/prodhack/moscow2025/data/repImplementations/AuthRepositoryImpl.kt index cfe078e..eebccdc 100644 --- a/app/src/main/java/com/prodhack/moscow2025/data/repImplementations/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/prodhack/moscow2025/data/repImplementations/AuthRepositoryImpl.kt @@ -25,7 +25,7 @@ class AuthRepositoryImpl( private val authorizationDataStore: AuthorizationDataStore ) : AuthRepository, BaseRepository() { - override val defaultKtorClient = ktorClient.client + override val defaultKtorClient = ktorClient.authClient override fun fetchLoginState(): Flow = authorizationDataStore.token.map { it.isNotBlank() } diff --git a/app/src/main/java/com/prodhack/moscow2025/domain/usecase/resumes/CalculateResumeDiffUseCase.kt b/app/src/main/java/com/prodhack/moscow2025/domain/usecase/resumes/CalculateResumeDiffUseCase.kt index fda44a5..a534f98 100644 --- a/app/src/main/java/com/prodhack/moscow2025/domain/usecase/resumes/CalculateResumeDiffUseCase.kt +++ b/app/src/main/java/com/prodhack/moscow2025/domain/usecase/resumes/CalculateResumeDiffUseCase.kt @@ -1,7 +1,7 @@ package com.prodhack.moscow2025.domain.usecase.resumes +import com.prodhack.moscow2025.domain.models.ExperienceType import com.prodhack.moscow2025.domain.models.ResumeModel -import com.prodhack.moscow2025.presentation.utils.toReadableText data class ResumeDiff( val changedFields: List, @@ -55,7 +55,7 @@ class CalculateResumeDiffUseCase { } val removed = previous.skills.toSet() - current.skills.toSet() - if (added.isNotEmpty()) { + if (removed.isNotEmpty()) { changes.add( ChangeModel( title = "Удалены навыки", @@ -79,7 +79,7 @@ class CalculateResumeDiffUseCase { changes.add( ChangeModel( "Опыт", - "${previous.experienceType.toReadableText()} ->\n${current.experienceType.toReadableText()}" + "${previous.experienceType.toReadable()} ->\n${current.experienceType.toReadable()}" ) ) } @@ -98,7 +98,7 @@ class CalculateResumeDiffUseCase { } val removed = previous.experience.toSet() - current.experience.toSet() - if (added.isNotEmpty()) { + if (removed.isNotEmpty()) { changes.add( ChangeModel( "Удален опыт", @@ -121,7 +121,7 @@ class CalculateResumeDiffUseCase { } val removed = previous.education.toSet() - current.education.toSet() - if (added.isNotEmpty()) { + if (removed.isNotEmpty()) { changes.add( ChangeModel( "Удалено образование", @@ -144,7 +144,7 @@ class CalculateResumeDiffUseCase { } val removed = previous.projects.toSet() - current.projects.toSet() - if (added.isNotEmpty()) { + if (removed.isNotEmpty()) { changes.add( ChangeModel( "Удален проект", @@ -160,3 +160,11 @@ class CalculateResumeDiffUseCase { ) } } + +private fun ExperienceType.toReadable(): String = when (this) { + ExperienceType.NoExperience -> "Нет опыта" + ExperienceType.LessThan1 -> "Меньше года" + ExperienceType.Between1And3 -> "1-3 года" + ExperienceType.Between3And6 -> "3-6 лет" + ExperienceType.MoreThan6 -> "Более 6 лет" +} diff --git a/app/src/main/java/com/prodhack/moscow2025/presentation/screens/resumeHistory/ResumeHistoryScreen.kt b/app/src/main/java/com/prodhack/moscow2025/presentation/screens/resumeHistory/ResumeHistoryScreen.kt index 7dd85aa..c3baa8f 100644 --- a/app/src/main/java/com/prodhack/moscow2025/presentation/screens/resumeHistory/ResumeHistoryScreen.kt +++ b/app/src/main/java/com/prodhack/moscow2025/presentation/screens/resumeHistory/ResumeHistoryScreen.kt @@ -98,7 +98,7 @@ fun ErrorCollectorScope.ResumeHistoryScreen( ) { items(items.itemCount) { index -> val version = items[index] ?: return@items - val previous = if (index + 1 < items.itemCount) items[index + 1] else null + val previous = if ((index + 1) < items.itemCount) items[index + 1] else null val expanded = expandedState[index] ?: false HistoryCard( current = version,