You've already forked RekomenciMobile
before sleep
This commit is contained in:
+3
@@ -22,4 +22,7 @@ interface ResumeDao: BasePaginationDAO<ResumeEntity> {
|
||||
|
||||
@Query("SELECT * FROM resumes WHERE id = :resumeId LIMIT 1")
|
||||
fun getById(resumeId: String): Flow<ResumeEntity?>
|
||||
|
||||
@Query("DELETE FROM resumes WHERE id = :resumeId")
|
||||
suspend fun deleteWithId(resumeId: String)
|
||||
}
|
||||
|
||||
+16
-20
@@ -27,6 +27,7 @@ import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.merge
|
||||
import org.koin.core.annotation.Single
|
||||
import kotlin.collections.map
|
||||
|
||||
@Single
|
||||
class ResumeRepositoryImpl(
|
||||
@@ -78,7 +79,7 @@ class ResumeRepositoryImpl(
|
||||
override suspend fun updateResume(
|
||||
resumeId: String,
|
||||
resumeForm: ResumeCreationModel
|
||||
): Result<String> = networkRequest<ResumeCreateDTO> {
|
||||
): Result<String> = networkRequest<ResumeDTO> {
|
||||
method = HttpMethod.Patch
|
||||
|
||||
url {
|
||||
@@ -88,7 +89,13 @@ class ResumeRepositoryImpl(
|
||||
setBody(resumeForm.mapToData())
|
||||
contentType(ContentType.Application.Json)
|
||||
}.map {
|
||||
resumeId
|
||||
resumeDao.upsertAll(
|
||||
listOf(
|
||||
it.mapToDB()
|
||||
)
|
||||
)
|
||||
resumeDao.deleteWithId(resumeId)
|
||||
it.id
|
||||
}
|
||||
|
||||
override suspend fun refreshResume(resumeId: String): Result<ResumeModel> =
|
||||
@@ -140,23 +147,12 @@ class ResumeRepositoryImpl(
|
||||
resumeId: String,
|
||||
offset: Long,
|
||||
pageSize: Int
|
||||
): Result<List<ResumeModel>> {
|
||||
val mock = List(pageSize) { index ->
|
||||
val version = (offset + index + 1).toInt()
|
||||
ResumeModel(
|
||||
id = resumeId,
|
||||
position = "Android разработчик v$version",
|
||||
about = "Описание версии $version",
|
||||
skills = listOf("Kotlin", "Compose", "Room", "Ktor $version"),
|
||||
city = "Москва",
|
||||
experienceType = com.prodhack.moscow2025.domain.models.ExperienceType.Between3And6,
|
||||
experience = emptyList(),
|
||||
education = emptyList(),
|
||||
projects = emptyList(),
|
||||
prediction = Pair(200000 + version * 1000, 230000 + version * 1000),
|
||||
recommendedSkills = listOf("Coroutines", "Flows")
|
||||
)
|
||||
): Result<List<ResumeModel>> = networkRequest<ResumeListDTO> {
|
||||
method = HttpMethod.Get
|
||||
url {
|
||||
path("resume", resumeId, "history")
|
||||
parameters.append("limit", pageSize.toString())
|
||||
parameters.append("offset", offset.toString())
|
||||
}
|
||||
return Result.success(mock)
|
||||
}
|
||||
}.map { it -> it.resumes.map { it.mapToDomain() } }
|
||||
}
|
||||
|
||||
+7
-1
@@ -36,7 +36,13 @@ data class ResumeFormState(
|
||||
)
|
||||
|
||||
@KoinViewModel
|
||||
open class CreateResumeViewModel(
|
||||
class CreateResumeViewModel(
|
||||
suggestSkillsUseCase: SuggestSkillsUseCase,
|
||||
validateDataUseCase: ValidateFieldsUseCase,
|
||||
postResumeUseCase: PostResumeUseCase
|
||||
) : BaseCreateResumeViewModel(suggestSkillsUseCase, validateDataUseCase, postResumeUseCase)
|
||||
|
||||
open class BaseCreateResumeViewModel(
|
||||
private val suggestSkillsUseCase: SuggestSkillsUseCase,
|
||||
private val validateDataUseCase: ValidateFieldsUseCase,
|
||||
private val postResumeUseCase: PostResumeUseCase
|
||||
+11
-9
@@ -1,5 +1,6 @@
|
||||
package com.prodhack.moscow2025.presentation.screens.createResume
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.ColumnScope
|
||||
@@ -52,7 +53,7 @@ import org.koin.androidx.compose.koinViewModel
|
||||
fun ErrorCollectorScope.CreateResumeScreen(
|
||||
goBack: () -> Unit,
|
||||
openResumeDetails: (String) -> Unit,
|
||||
viewModel: CreateResumeViewModel = koinViewModel(),
|
||||
viewModel: BaseCreateResumeViewModel = koinViewModel<CreateResumeViewModel>(),
|
||||
title: String = "Новое резюме",
|
||||
submitButtonText: String = "Узнать свою ЗП"
|
||||
) {
|
||||
@@ -297,14 +298,15 @@ fun ErrorCollectorScope.CreateResumeScreen(
|
||||
|
||||
Spacer(modifier = Modifier.height(Paddings.large))
|
||||
|
||||
val resumeFillState = viewModel.resumeFillState.collectAsStateWithCallbacks {
|
||||
openResumeDetails(it)
|
||||
}
|
||||
BigButton(
|
||||
onClick = viewModel::submit,
|
||||
buttonText = submitButtonText,
|
||||
isLoading = resumeFillState.value.isLoading
|
||||
)
|
||||
val resumeFillState = viewModel.resumeFillState.collectAsStateWithCallbacks {
|
||||
Log.d("CreateResumeScreen", it)
|
||||
openResumeDetails(it)
|
||||
}
|
||||
BigButton(
|
||||
onClick = viewModel::submit,
|
||||
buttonText = submitButtonText,
|
||||
isLoading = resumeFillState.value.isLoading
|
||||
)
|
||||
Spacer(modifier = Modifier.height(Paddings.large))
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -11,7 +11,11 @@ import org.koin.core.parameter.parametersOf
|
||||
@Composable
|
||||
fun ErrorCollectorScope.EditResumeScreen(
|
||||
navBackStackEntry: NavBackStackEntry,
|
||||
viewModel: EditResumeViewModel = koinViewModel(),
|
||||
viewModel: EditResumeViewModel = koinViewModel {
|
||||
parametersOf(
|
||||
navBackStackEntry.arguments?.getString(AppDestination.ResumeEdit.ARG_ID, "") ?: ""
|
||||
)
|
||||
},
|
||||
openResumeDetails: (String) -> Unit,
|
||||
goBack: () -> Unit
|
||||
) {
|
||||
|
||||
+7
-8
@@ -1,15 +1,14 @@
|
||||
package com.prodhack.moscow2025.presentation.screens.editResume
|
||||
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.prodhack.moscow2025.domain.usecase.auth.ValidateFieldsUseCase
|
||||
import com.prodhack.moscow2025.domain.usecase.resumes.GetResumeInfoUseCase
|
||||
import com.prodhack.moscow2025.domain.usecase.resumes.PostResumeUseCase
|
||||
import com.prodhack.moscow2025.domain.usecase.resumes.SuggestSkillsUseCase
|
||||
import com.prodhack.moscow2025.presentation.navigation.AppDestination
|
||||
import com.prodhack.moscow2025.presentation.screens.createResume.CreateResumeViewModel
|
||||
import com.prodhack.moscow2025.presentation.screens.createResume.BaseCreateResumeViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.android.annotation.KoinViewModel
|
||||
import org.koin.core.annotation.Provided
|
||||
|
||||
@KoinViewModel
|
||||
class EditResumeViewModel(
|
||||
@@ -17,15 +16,15 @@ class EditResumeViewModel(
|
||||
suggestSkillsUseCase: SuggestSkillsUseCase,
|
||||
validateDataUseCase: ValidateFieldsUseCase,
|
||||
postResumeUseCase: PostResumeUseCase,
|
||||
savedStateHandle: SavedStateHandle
|
||||
) : CreateResumeViewModel(
|
||||
@Provided resumeId: String
|
||||
) : BaseCreateResumeViewModel(
|
||||
suggestSkillsUseCase = suggestSkillsUseCase,
|
||||
validateDataUseCase = validateDataUseCase,
|
||||
postResumeUseCase = postResumeUseCase
|
||||
) {
|
||||
private val resumeId: String =
|
||||
savedStateHandle.get<String>(AppDestination.ResumeEdit.ARG_ID)
|
||||
?: savedStateHandle.get<String>("id") ?: ""
|
||||
// private val resumeId: String =
|
||||
// savedStateHandle.get<String>(AppDestination.ResumeEdit.ARG_ID)
|
||||
// ?: savedStateHandle.get<String>("id") ?: ""
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
|
||||
+1
-4
@@ -61,10 +61,7 @@ fun ErrorCollectorScope.ResumeDetailsScreen(
|
||||
)
|
||||
}
|
||||
) {
|
||||
|
||||
val resumeState by viewModel.resumeState.collectAsStateWithCallbacks()
|
||||
|
||||
resumeState.FoldUIStateWithGlobalCallbacks(
|
||||
viewModel.resumeState.FoldUIStateWithGlobalCallbacks(
|
||||
onLoading = {
|
||||
LoadingPlaceholder(
|
||||
modifier = Modifier
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ class ResumeDetailsViewModel(
|
||||
resumeState.collect {
|
||||
val data = (it as? UIState.Success)?.data
|
||||
if (data?.prediction == null) {
|
||||
startPredictionPolling()
|
||||
// startPredictionPolling()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user