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