From 86f7ee35ce11244c32f6045de3a8313bec9e63fa Mon Sep 17 00:00:00 2001 From: vladimir-shperling Date: Wed, 29 Oct 2025 09:55:11 +0300 Subject: [PATCH] Initial commit --- .../java/ru/myitschool/work/core/Constants.kt | 5 ++ .../ru/myitschool/work/data/AppRepository.kt | 20 ++---- .../ru/myitschool/work/data/dto/ErrorDto.kt | 10 --- .../ru/myitschool/work/data/dto/UserDto.kt | 20 ------ .../work/data/source/NetworkDataSource.kt | 71 ------------------- .../myitschool/work/domain/AddBookUseCase.kt | 8 ++- .../work/domain/GetUserDataUseCase.kt | 2 +- .../work/domain/entities/BookingEntity.kt | 1 + .../work/domain/entities/UserEntity.kt | 1 + .../myitschool/work/ui/root/RootActivity.kt | 1 + .../ru/myitschool/work/ui/root/RootIntent.kt | 1 + .../ru/myitschool/work/ui/root/RootState.kt | 1 + .../myitschool/work/ui/root/RootViewModel.kt | 1 + .../java/ru/myitschool/work/ui/theme/Color.kt | 1 + .../java/ru/myitschool/work/ui/theme/Theme.kt | 1 + .../java/ru/myitschool/work/ui/theme/Type.kt | 18 +---- 16 files changed, 24 insertions(+), 138 deletions(-) delete mode 100644 app/src/main/java/ru/myitschool/work/data/dto/ErrorDto.kt delete mode 100644 app/src/main/java/ru/myitschool/work/data/dto/UserDto.kt delete mode 100644 app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt diff --git a/app/src/main/java/ru/myitschool/work/core/Constants.kt b/app/src/main/java/ru/myitschool/work/core/Constants.kt index 4d49e30..9564d78 100644 --- a/app/src/main/java/ru/myitschool/work/core/Constants.kt +++ b/app/src/main/java/ru/myitschool/work/core/Constants.kt @@ -1,5 +1,10 @@ package ru.myitschool.work.core + +// ДАННЫЙ КЛАСС ПРИ ТЕСТИРОВАНИИ БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ +// Используйте ссылки только из переменных этого класса +// Можете изменить хост, но для тестирование он будет подменён тестовым сервером + object Constants { const val HOST = "http://10.0.2.2:8080" const val USER_URL = "/user" diff --git a/app/src/main/java/ru/myitschool/work/data/AppRepository.kt b/app/src/main/java/ru/myitschool/work/data/AppRepository.kt index a3d233a..b8ab404 100644 --- a/app/src/main/java/ru/myitschool/work/data/AppRepository.kt +++ b/app/src/main/java/ru/myitschool/work/data/AppRepository.kt @@ -1,26 +1,14 @@ package ru.myitschool.work.data -import ru.myitschool.work.data.source.NetworkDataSource -import ru.myitschool.work.domain.entities.BookingEntity import ru.myitschool.work.domain.entities.UserEntity object AppRepository { - suspend fun loadData(): Result { - return NetworkDataSource.getUser().map { dto -> - UserEntity( - name = dto.name, - bookingList = dto.booking.map { bookingDto -> - BookingEntity( - roomName = bookingDto.room, - time = bookingDto.time - ) - } - ) - } + suspend fun loadData(): UserEntity { + TODO("заверши написание кода") } - suspend fun addBook(room: String, time: String): Result { - return NetworkDataSource.addBook(room, time) + suspend fun addBook(room: String, time: String) { + // TODO: заверши написание кода } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/data/dto/ErrorDto.kt b/app/src/main/java/ru/myitschool/work/data/dto/ErrorDto.kt deleted file mode 100644 index c04ff69..0000000 --- a/app/src/main/java/ru/myitschool/work/data/dto/ErrorDto.kt +++ /dev/null @@ -1,10 +0,0 @@ -package ru.myitschool.work.data.dto - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class ErrorDto( - @SerialName("error") - val error: String, -) \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/data/dto/UserDto.kt b/app/src/main/java/ru/myitschool/work/data/dto/UserDto.kt deleted file mode 100644 index dd574d3..0000000 --- a/app/src/main/java/ru/myitschool/work/data/dto/UserDto.kt +++ /dev/null @@ -1,20 +0,0 @@ -package ru.myitschool.work.data.dto - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -data class UserDto( - @SerialName("name") - val name: String, - @SerialName("booking") - val booking: List -) { - @Serializable - data class BookingDto( - @SerialName("room") - val room: String, - @SerialName("time") - val time: String, - ) -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt b/app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt deleted file mode 100644 index 305c70b..0000000 --- a/app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt +++ /dev/null @@ -1,71 +0,0 @@ -package ru.myitschool.work.data.source - -import io.ktor.client.HttpClient -import io.ktor.client.call.body -import io.ktor.client.engine.cio.CIO -import io.ktor.client.plugins.contentnegotiation.ContentNegotiation -import io.ktor.client.request.forms.FormPart -import io.ktor.client.request.forms.MultiPartFormDataContent -import io.ktor.client.request.forms.formData -import io.ktor.client.request.get -import io.ktor.client.request.post -import io.ktor.client.request.setBody -import io.ktor.http.HttpStatusCode -import io.ktor.serialization.kotlinx.json.json -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import kotlinx.serialization.json.Json -import ru.myitschool.work.core.Constants -import ru.myitschool.work.data.dto.ErrorDto -import ru.myitschool.work.data.dto.UserDto - -object NetworkDataSource { - private val client by lazy { - HttpClient(CIO) { - install(ContentNegotiation) { - json( - Json { - isLenient = true - ignoreUnknownKeys = true - explicitNulls = true - encodeDefaults = true - } - ) - } - } - } - - suspend fun getUser(): Result = withContext(Dispatchers.IO) { - return@withContext runCatching { - val response = client.get(Constants.FULL_USER_URL) - if (response.status == HttpStatusCode.OK) { - response.body() - } else { - error(response.body().error) - } - } - } - - suspend fun addBook( - room: String, - time: String, - ): Result = withContext(Dispatchers.IO) { - return@withContext runCatching { - val response = client.post(Constants.FULL_BOOK_URL) { - setBody( - MultiPartFormDataContent( - formData( - FormPart("room", room), - FormPart("time", time), - ) - ) - ) - } - if (response.status == HttpStatusCode.OK) { - Unit - } else { - error(response.body().error) - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/domain/AddBookUseCase.kt b/app/src/main/java/ru/myitschool/work/domain/AddBookUseCase.kt index 12dc66b..bd8da47 100644 --- a/app/src/main/java/ru/myitschool/work/domain/AddBookUseCase.kt +++ b/app/src/main/java/ru/myitschool/work/domain/AddBookUseCase.kt @@ -9,9 +9,11 @@ class AddBookUseCase( room: String, time: String, ): Result { - return repository.addBook( - room = room, - time = time, + return Result.success( + repository.addBook( + room = room, + time = time, + ) ) } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/domain/GetUserDataUseCase.kt b/app/src/main/java/ru/myitschool/work/domain/GetUserDataUseCase.kt index 3417a93..f255e4a 100644 --- a/app/src/main/java/ru/myitschool/work/domain/GetUserDataUseCase.kt +++ b/app/src/main/java/ru/myitschool/work/domain/GetUserDataUseCase.kt @@ -7,6 +7,6 @@ class GetUserDataUseCase( private val repository: AppRepository ) { suspend operator fun invoke(): Result { - return repository.loadData() + return Result.success(repository.loadData()) } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/domain/entities/BookingEntity.kt b/app/src/main/java/ru/myitschool/work/domain/entities/BookingEntity.kt index 0bf603d..f97a31e 100644 --- a/app/src/main/java/ru/myitschool/work/domain/entities/BookingEntity.kt +++ b/app/src/main/java/ru/myitschool/work/domain/entities/BookingEntity.kt @@ -1,5 +1,6 @@ package ru.myitschool.work.domain.entities +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ data class BookingEntity( val roomName: String, val time: String, diff --git a/app/src/main/java/ru/myitschool/work/domain/entities/UserEntity.kt b/app/src/main/java/ru/myitschool/work/domain/entities/UserEntity.kt index 86a9851..126c1c8 100644 --- a/app/src/main/java/ru/myitschool/work/domain/entities/UserEntity.kt +++ b/app/src/main/java/ru/myitschool/work/domain/entities/UserEntity.kt @@ -1,5 +1,6 @@ package ru.myitschool.work.domain.entities +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ data class UserEntity( val name: String, val bookingList: List diff --git a/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt b/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt index 8fcaefb..592435a 100644 --- a/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt +++ b/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import ru.myitschool.work.ui.theme.WorkTheme +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ class RootActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/ru/myitschool/work/ui/root/RootIntent.kt b/app/src/main/java/ru/myitschool/work/ui/root/RootIntent.kt index 9804e07..865a028 100644 --- a/app/src/main/java/ru/myitschool/work/ui/root/RootIntent.kt +++ b/app/src/main/java/ru/myitschool/work/ui/root/RootIntent.kt @@ -1,5 +1,6 @@ package ru.myitschool.work.ui.root +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ sealed interface RootIntent { data object LoadData: RootIntent data class AddBook( diff --git a/app/src/main/java/ru/myitschool/work/ui/root/RootState.kt b/app/src/main/java/ru/myitschool/work/ui/root/RootState.kt index 1c5d32f..1dbc893 100644 --- a/app/src/main/java/ru/myitschool/work/ui/root/RootState.kt +++ b/app/src/main/java/ru/myitschool/work/ui/root/RootState.kt @@ -2,6 +2,7 @@ package ru.myitschool.work.ui.root import ru.myitschool.work.domain.entities.UserEntity +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ sealed interface RootState { data object NotLoaded: RootState data object Loading: RootState diff --git a/app/src/main/java/ru/myitschool/work/ui/root/RootViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/root/RootViewModel.kt index d95ac89..9646391 100644 --- a/app/src/main/java/ru/myitschool/work/ui/root/RootViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/root/RootViewModel.kt @@ -11,6 +11,7 @@ import ru.myitschool.work.data.AppRepository import ru.myitschool.work.domain.AddBookUseCase import ru.myitschool.work.domain.GetUserDataUseCase +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ class RootViewModel : ViewModel() { private val getUserDataUseCase by lazy { GetUserDataUseCase( diff --git a/app/src/main/java/ru/myitschool/work/ui/theme/Color.kt b/app/src/main/java/ru/myitschool/work/ui/theme/Color.kt index 22226f4..d358f9f 100644 --- a/app/src/main/java/ru/myitschool/work/ui/theme/Color.kt +++ b/app/src/main/java/ru/myitschool/work/ui/theme/Color.kt @@ -2,6 +2,7 @@ package ru.myitschool.work.ui.theme import androidx.compose.ui.graphics.Color +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ val Purple80 = Color(0xFFD0BCFF) val PurpleGrey80 = Color(0xFFCCC2DC) val Pink80 = Color(0xFFEFB8C8) diff --git a/app/src/main/java/ru/myitschool/work/ui/theme/Theme.kt b/app/src/main/java/ru/myitschool/work/ui/theme/Theme.kt index d9cc58f..4200781 100644 --- a/app/src/main/java/ru/myitschool/work/ui/theme/Theme.kt +++ b/app/src/main/java/ru/myitschool/work/ui/theme/Theme.kt @@ -10,6 +10,7 @@ import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ private val DarkColorScheme = darkColorScheme( primary = Purple80, secondary = PurpleGrey80, diff --git a/app/src/main/java/ru/myitschool/work/ui/theme/Type.kt b/app/src/main/java/ru/myitschool/work/ui/theme/Type.kt index 61b2923..99cdb74 100644 --- a/app/src/main/java/ru/myitschool/work/ui/theme/Type.kt +++ b/app/src/main/java/ru/myitschool/work/ui/theme/Type.kt @@ -6,7 +6,7 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp -// Set of Material typography styles to start with +// ДАННЫЙ КЛАСС ЗАПРЕЩЕНО МОДИЦИФИРОВАТЬ! ПРИ ТЕСТИРОВАНИИ ОН БУДЕТ ВОЗВРАЩЁН В ОРИГИНАЛЬНОЕ ЗНАЧЕНИЕ val Typography = Typography( bodyLarge = TextStyle( fontFamily = FontFamily.Default, @@ -15,20 +15,4 @@ val Typography = Typography( lineHeight = 24.sp, letterSpacing = 0.5.sp ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ ) \ No newline at end of file