last commit (I hope)

This commit is contained in:
MaximOksiuta
2025-11-23 15:52:52 +03:00
parent 57771edd14
commit 6f23b61af0
6 changed files with 6 additions and 7 deletions
+6
View File
@@ -10,3 +10,9 @@ MoscowHackatonTemplate — экраны приложения
- История резюме (ResumeHistoryScreen): список версий, раскрытие изменений, выбор двух версий для сравнения, переход на экран diff. Статус: Готов. - История резюме (ResumeHistoryScreen): список версий, раскрытие изменений, выбор двух версий для сравнения, переход на экран diff. Статус: Готов.
- Сравнение версий (ResumeDiffScreen): визуальное сравнение выбранных версий резюме (зарплата, навыки, опыт, образование) с подсветкой изменений. Статус: Готов. - Сравнение версий (ResumeDiffScreen): визуальное сравнение выбранных версий резюме (зарплата, навыки, опыт, образование) с подсветкой изменений. Статус: Готов.
- Профиль (ProfileScreen): редактирование данных пользователя (имя, фамилия, телефон), сохранение и выход из аккаунта. Статус: Готов. - Профиль (ProfileScreen): редактирование данных пользователя (имя, фамилия, телефон), сохранение и выход из аккаунта. Статус: Готов.
Валидация и обработка ошибок
- Поля форм валидируются на уровне use case (например, ValidateFieldsUseCase) с возвратом словаря ошибок, который отображается под соответствующими полями.
- Перед отправкой запросов состояние переводится в UIState.Loading; при успешном ответе UIState.Success вызывает переход/снекбар.
- Ошибки ввода, сетевые и неожиданные ошибки обрабатываются через collectAsStateWithCallbacks: показывается текст ошибки и snackbar с сообщением «Ошибка: ...».
- Дополнительно на регистрации и логине кнопки блокируются индикатором загрузки, чтобы избежать повторных отправок.
BIN
View File
Binary file not shown.
@@ -17,8 +17,6 @@ enum class ExperienceTypeDTO {
@SerialName("noExperience") @SerialName("noExperience")
NoExperience, NoExperience,
@SerialName("lessThan1")
LessThan1,
@SerialName("between1And3") @SerialName("between1And3")
Between1And3, Between1And3,
@@ -31,7 +29,6 @@ enum class ExperienceTypeDTO {
fun mapToDomain(): ExperienceType = when (this) { fun mapToDomain(): ExperienceType = when (this) {
NoExperience -> ExperienceType.NoExperience NoExperience -> ExperienceType.NoExperience
LessThan1 -> ExperienceType.LessThan1
Between1And3 -> ExperienceType.Between1And3 Between1And3 -> ExperienceType.Between1And3
Between3And6 -> ExperienceType.Between3And6 Between3And6 -> ExperienceType.Between3And6
MoreThan6 -> ExperienceType.MoreThan6 MoreThan6 -> ExperienceType.MoreThan6
@@ -40,7 +37,6 @@ enum class ExperienceTypeDTO {
fun ExperienceType.mapToData(): ExperienceTypeDTO = when (this) { fun ExperienceType.mapToData(): ExperienceTypeDTO = when (this) {
ExperienceType.NoExperience -> ExperienceTypeDTO.NoExperience ExperienceType.NoExperience -> ExperienceTypeDTO.NoExperience
ExperienceType.LessThan1 -> ExperienceTypeDTO.LessThan1
ExperienceType.Between1And3 -> ExperienceTypeDTO.Between1And3 ExperienceType.Between1And3 -> ExperienceTypeDTO.Between1And3
ExperienceType.Between3And6 -> ExperienceTypeDTO.Between3And6 ExperienceType.Between3And6 -> ExperienceTypeDTO.Between3And6
ExperienceType.MoreThan6 -> ExperienceTypeDTO.MoreThan6 ExperienceType.MoreThan6 -> ExperienceTypeDTO.MoreThan6
@@ -56,7 +56,6 @@ data class Project(
enum class ExperienceType { enum class ExperienceType {
NoExperience, NoExperience,
LessThan1,
Between1And3, Between1And3,
Between3And6, Between3And6,
MoreThan6 MoreThan6
@@ -163,7 +163,6 @@ class CalculateResumeDiffUseCase {
private fun ExperienceType.toReadable(): String = when (this) { private fun ExperienceType.toReadable(): String = when (this) {
ExperienceType.NoExperience -> "Нет опыта" ExperienceType.NoExperience -> "Нет опыта"
ExperienceType.LessThan1 -> "Меньше года"
ExperienceType.Between1And3 -> "1-3 года" ExperienceType.Between1And3 -> "1-3 года"
ExperienceType.Between3And6 -> "3-6 лет" ExperienceType.Between3And6 -> "3-6 лет"
ExperienceType.MoreThan6 -> "Более 6 лет" ExperienceType.MoreThan6 -> "Более 6 лет"
@@ -6,7 +6,6 @@ import kotlin.math.roundToInt
fun ExperienceType.toReadableText(): String = when (this) { fun ExperienceType.toReadableText(): String = when (this) {
ExperienceType.NoExperience -> "Нет опыта" ExperienceType.NoExperience -> "Нет опыта"
ExperienceType.LessThan1 -> "Меньше года"
ExperienceType.Between1And3 -> "1-3 года" ExperienceType.Between1And3 -> "1-3 года"
ExperienceType.Between3And6 -> "3-6 лет" ExperienceType.Between3And6 -> "3-6 лет"
ExperienceType.MoreThan6 -> "Более 6 лет" ExperienceType.MoreThan6 -> "Более 6 лет"