checkpoint 0 #5
@ -30,7 +30,7 @@ object AuthRepository {
|
||||
/**
|
||||
* Из памяти
|
||||
*/
|
||||
suspend fun getToken(): String? {
|
||||
suspend fun auth(): String? {
|
||||
if (tokenCache == null) {
|
||||
tokenCache = App.context.userDataStore.data
|
||||
.firstOrNull()
|
||||
@ -45,9 +45,9 @@ object AuthRepository {
|
||||
/**
|
||||
* При обращении к серверу
|
||||
*/
|
||||
suspend fun getToken(login : String, password : String) : Result<String> {
|
||||
Log.e("getTokenNDSInAR", NetworkDataSource.getToken(login, password).toString())
|
||||
return NetworkDataSource.getToken(login, password)
|
||||
suspend fun auth(login : String, password : String) : Result<String> {
|
||||
Log.e("getTokenNDSInAR", NetworkDataSource.auth(login, password).toString())
|
||||
return NetworkDataSource.auth(login, password)
|
||||
}
|
||||
|
||||
suspend fun logout() {
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package ru.myitschool.work.data.repo
|
||||
|
||||
import android.util.Log
|
||||
import ru.myitschool.work.data.dto.BookRequestDto
|
||||
import ru.myitschool.work.data.source.NetworkDataSource
|
||||
import ru.myitschool.work.domain.book.entities.BookRequestData
|
||||
@ -10,8 +11,10 @@ class BookRepository(
|
||||
private val authRepository: AuthRepository
|
||||
) {
|
||||
suspend fun getInfo(): Result<MainInfoEntity> {
|
||||
val code = authRepository.getToken() ?: return getNoAuthResult()
|
||||
val code = authRepository.auth() ?: return getNoAuthResult()
|
||||
Log.e("getInfoCode", "!!!!!!!!!!!!!! getInfo ERROR $code")
|
||||
return NetworkDataSource.getInfo(code).mapCatching { dto ->
|
||||
Log.e("getInfoCode", "!!!!!!!!!!!!!! getInfo ERROR ${dto.booking}")
|
||||
MainInfoEntity(
|
||||
name = dto.name ?: error("Name is null"),
|
||||
photoUrl = dto.photoUrl ?: error("Photo url is null"),
|
||||
@ -26,7 +29,7 @@ class BookRepository(
|
||||
}
|
||||
|
||||
suspend fun getBookingInfo(): Result<List<BookingData>> {
|
||||
val code = authRepository.getToken() ?: return getNoAuthResult()
|
||||
val code = authRepository.auth() ?: return getNoAuthResult()
|
||||
return NetworkDataSource.getBooking(code).mapCatching { dto ->
|
||||
dto?.map { (date, places) ->
|
||||
BookingData(
|
||||
@ -43,7 +46,7 @@ class BookRepository(
|
||||
}
|
||||
|
||||
suspend fun sendBook(data: BookRequestData): Result<Boolean> {
|
||||
val code = authRepository.getToken() ?: return getNoAuthResult()
|
||||
val code = authRepository.auth() ?: return getNoAuthResult()
|
||||
val dto = BookRequestDto(data.date, data.placeId)
|
||||
return NetworkDataSource.addBook(code, dto)
|
||||
}
|
||||
|
||||
@ -1,9 +1,14 @@
|
||||
package ru.myitschool.work.data.repo
|
||||
|
||||
import ru.myitschool.work.data.source.NetworkDataSource
|
||||
|
||||
object MeetingsRepository {
|
||||
private var roomCache: String? = null
|
||||
|
||||
fun getRoom(): String? {
|
||||
if (roomCache == null) {
|
||||
NetworkDataSource
|
||||
}
|
||||
return roomCache
|
||||
}
|
||||
}
|
||||
@ -1,17 +1,14 @@
|
||||
package ru.myitschool.work.data.source
|
||||
|
||||
import android.accounts.NetworkErrorException
|
||||
import android.util.Log
|
||||
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.HttpRequestData
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.client.request.post
|
||||
import io.ktor.client.request.setBody
|
||||
import io.ktor.client.statement.bodyAsText
|
||||
import io.ktor.client.statement.request
|
||||
import io.ktor.http.ContentType
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.http.contentType
|
||||
@ -19,7 +16,6 @@ import io.ktor.serialization.kotlinx.json.json
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.JsonArray
|
||||
import ru.myitschool.work.core.Constants
|
||||
import ru.myitschool.work.data.dto.PlaceDto
|
||||
import ru.myitschool.work.data.dto.BookRequestDto
|
||||
@ -40,26 +36,20 @@ object NetworkDataSource {
|
||||
}
|
||||
}
|
||||
}
|
||||
suspend fun getToken(login: String, password: String): Result<String> = withContext(Dispatchers.IO) {
|
||||
suspend fun auth(login: String, password: String): Result<String> = withContext(Dispatchers.IO) {
|
||||
return@withContext runCatching {
|
||||
val response = client.post("${Constants.HOST}/api${Constants.AUTH_URL}") {
|
||||
contentType(ContentType.Application.Json)
|
||||
Log.d("bodyInToken",
|
||||
setBody(
|
||||
"""{
|
||||
"login" : "$login",
|
||||
"password" : "$password"
|
||||
} """.trimIndent()
|
||||
)
|
||||
setBody(
|
||||
"""{
|
||||
"login" : "${login}",
|
||||
"password" : "${password}"
|
||||
} """.trimIndent()
|
||||
)
|
||||
}
|
||||
Log.e("getTokenInNDS", response.body())
|
||||
if (response.status != HttpStatusCode.OK) {
|
||||
Log.e("getToken", response.status.toString())
|
||||
Log.e("auth", response.status.toString())
|
||||
throw Exception("Неизвестная ошибка ${response.status}")
|
||||
}
|
||||
else if (response.status == HttpStatusCode.Unauthorized) {
|
||||
@ -89,6 +79,7 @@ object NetworkDataSource {
|
||||
response.body<UserDto>()
|
||||
} else {
|
||||
println("!!!!!!!!!!!!!! getInfo ERROR ${response.bodyAsText()}")
|
||||
Log.e("getInfo", "!!!!!!!!!!!!!! getInfo ERROR ${response.bodyAsText()}")
|
||||
error(response.bodyAsText())
|
||||
}
|
||||
}
|
||||
@ -119,5 +110,5 @@ object NetworkDataSource {
|
||||
}
|
||||
}
|
||||
|
||||
private fun getUrl(token: String, targetUrl: String) = "${Constants.HOST}/api/$token$targetUrl"
|
||||
private fun getUrl(token: String, targetUrl: String) = "${Constants.HOST}/api/$targetUrl"
|
||||
}
|
||||
@ -6,6 +6,6 @@ class GetTokenLocalUseCase(
|
||||
private val repository: AuthRepository
|
||||
) {
|
||||
suspend operator fun invoke(): String? {
|
||||
return repository.getToken()
|
||||
return repository.auth()
|
||||
}
|
||||
}
|
||||
@ -7,7 +7,7 @@ class GetTokenNetworkUseCase(
|
||||
private val repository: AuthRepository
|
||||
) {
|
||||
suspend operator fun invoke(login : String, password: String): Result<String> {
|
||||
Log.e("GetTokenNetworkUseCase", repository.getToken(login, password).toString())
|
||||
return repository.getToken(login, password)
|
||||
Log.e("GetTokenNetworkUseCase", repository.auth(login, password).toString())
|
||||
return repository.auth(login, password)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package ru.myitschool.work.domain.meetings
|
||||
|
||||
|
||||
data class MeetingsInfoEntity(
|
||||
val id: String,
|
||||
val book: List<Book>
|
||||
) {
|
||||
data class Book(
|
||||
val date: String
|
||||
)
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package ru.myitschool.work.ui.screen.main
|
||||
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
@ -64,6 +65,7 @@ class MainViewModel : ViewModel() {
|
||||
_uiState.update {
|
||||
getMainDataUseCase.invoke().fold(
|
||||
onSuccess = { data ->
|
||||
Log.d("DataMain", "${data.name}, ${data.book}")
|
||||
MainState.Data(
|
||||
name = data.name,
|
||||
photoUrl = data.photoUrl,
|
||||
|
||||
@ -9,10 +9,12 @@ sealed interface MeetingsState {
|
||||
val error: String
|
||||
): MeetingsState
|
||||
data class Data(
|
||||
val name: String,
|
||||
val books: PersistentList<Book>,
|
||||
): MeetingsState {
|
||||
data class Book(
|
||||
val date: String,
|
||||
val time: String
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,8 +13,10 @@ import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
import ru.myitschool.work.data.repo.AuthRepository
|
||||
import ru.myitschool.work.data.repo.BookRepository
|
||||
import ru.myitschool.work.data.repo.MeetingsRepository
|
||||
import ru.myitschool.work.domain.auth.LogoutUseCase
|
||||
import ru.myitschool.work.domain.main.GetMainDataUseCase
|
||||
import ru.myitschool.work.domain.meetings.GetRoomUseCase
|
||||
import ru.myitschool.work.ui.nav.AuthScreenDestination
|
||||
import ru.myitschool.work.ui.screen.main.MainAction
|
||||
import ru.myitschool.work.ui.screen.main.MainState
|
||||
@ -30,7 +32,7 @@ class MeetingsViewModel: ViewModel() {
|
||||
LogoutUseCase(AuthRepository)
|
||||
}
|
||||
private val getMeetingsDataUseCase by lazy {
|
||||
GetMainDataUseCase(BookRepository(AuthRepository))
|
||||
GetRoomUseCase(MeetingsRepository)
|
||||
}
|
||||
init {
|
||||
|
||||
@ -40,7 +42,7 @@ class MeetingsViewModel: ViewModel() {
|
||||
// is MeetingIntent.Logout -> {
|
||||
// viewModelScope.launch {
|
||||
// logoutUseCase.invoke()
|
||||
// _actionFlow.emit(/*TODo*/)
|
||||
// _actionFlow.emit(/*TODO*/)
|
||||
// }
|
||||
// }
|
||||
// is MeetingIntent.Refresh -> {
|
||||
@ -48,19 +50,24 @@ class MeetingsViewModel: ViewModel() {
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
fun refresh() {
|
||||
viewModelScope.launch {
|
||||
_uiState.update { MeetingsState.Loading }
|
||||
_uiState.update {
|
||||
getMeetingsDataUseCase.invoke().fold(
|
||||
onFailure = { error ->
|
||||
MeetingsState.Error(
|
||||
error = error.message?.takeIf { it.isNotBlank() } ?: "Unknown error"
|
||||
)
|
||||
},
|
||||
onSuccess = TODO()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
// fun refresh() {
|
||||
// viewModelScope.launch {
|
||||
// _uiState.update { MeetingsState.Loading }
|
||||
// _uiState.update {
|
||||
// getMeetingsDataUseCase.invoke().fold(
|
||||
// onFailure = { error ->
|
||||
// MeetingsState.Error(
|
||||
// error = error.message?.takeIf { it.isNotBlank() } ?: "Unknown error"
|
||||
// )
|
||||
// },
|
||||
// onSuccess = { data ->
|
||||
// MeetingsState.Data(
|
||||
// name = data.name,
|
||||
// books = data.book
|
||||
// )
|
||||
// }
|
||||
// )
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user