diff --git a/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt b/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt index f9eb922..50b57d0 100644 --- a/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt +++ b/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt @@ -23,6 +23,12 @@ interface LoginApi { @Query("login") login: String ): Response + @GET("entries") + suspend fun entries( + @Header("Authorization") authHeader: String, + @Query("login") login: String + ): Response + @PUT("ban") suspend fun ban( @Header("Authorization") authHeader: String, diff --git a/app/src/main/java/ru/myitschool/work/ui/main/EntryClass.kt b/app/src/main/java/ru/myitschool/work/ui/main/EntryClass.kt new file mode 100644 index 0000000..412ab34 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/main/EntryClass.kt @@ -0,0 +1,11 @@ +package ru.myitschool.work.ui.main + +import java.time.LocalDateTime + +data class EntryClass( + val value: Long = 1, + val type:String= "", + val dateTime:String="", + val login: String ="" +) + diff --git a/app/src/main/java/ru/myitschool/work/ui/main/MainFragment.kt b/app/src/main/java/ru/myitschool/work/ui/main/MainFragment.kt index ee354d0..5d82f1a 100644 --- a/app/src/main/java/ru/myitschool/work/ui/main/MainFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/main/MainFragment.kt @@ -19,6 +19,11 @@ import ru.myitschool.work.utils.collectWhenStarted import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.google.gson.GsonBuilder +import createAuthHeader +import createRetrofit +import ru.myitschool.work.data.remote.LoginApi +import ru.myitschool.work.data.remote.PersonInfoDto import ru.myitschool.work.utils.HistoryItem @AndroidEntryPoint @@ -28,6 +33,9 @@ class MainFragment: Fragment(R.layout.fragment_main) { private val viewModel: MainViewModel by viewModels() private val picasso: Picasso by lazy { Picasso.get() } + private val retrofit = createRetrofit("your_username", "your_password") + private val loginApi = retrofit.create(LoginApi::class.java) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentMainBinding.bind(view) @@ -53,16 +61,24 @@ class MainFragment: Fragment(R.layout.fragment_main) { binding.admin.setOnClickListener { findNavController().navigate(AdminDestination(user, password)) } + subscribe(username, password) } } - subscribe() } - private fun subscribe() { + private fun subscribe(username:String, password:String) { viewModel.state.collectWhenStarted(this) { state -> val recyclerView = binding.recyclerView +// val authHeader = createAuthHeader(username = username, password= password) +// val info = loginApi.entries(authHeader, username) +// val personInfo = info.body()?.let { responseBody -> +// GsonBuilder().create().fromJson(responseBody.string(), PersonInfoDto::class.java) +// } + +// println(info) + val examList: MutableList = ArrayList() examList.add( HistoryItem( @@ -127,7 +143,6 @@ class MainFragment: Fragment(R.layout.fragment_main) { recyclerView.adapter = adapter } } - private fun setError(error: String?) { val showError = error != null val views = listOf(binding.fullname, binding.position, binding.lastEntry, binding.photo, binding.logout) diff --git a/app/src/main/java/ru/myitschool/work/ui/main/MainState.kt b/app/src/main/java/ru/myitschool/work/ui/main/MainState.kt index 1155a12..fc346c2 100644 --- a/app/src/main/java/ru/myitschool/work/ui/main/MainState.kt +++ b/app/src/main/java/ru/myitschool/work/ui/main/MainState.kt @@ -1,11 +1,11 @@ package ru.myitschool.work.ui.main data class MainState( - val fullName: String = "", - val photo: String = "", - val position: String = "", - val lastVisit: String = "", - val role: String = "", - val isBanned: Boolean = false, - val error: String? = null + val fullName: String = "", + val photo: String = "", + val position: String = "", + val lastVisit: String = "", + val role: String = "", + val isBanned: Boolean = false, + val error: String? = null ) diff --git a/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt index e54e7ae..ae593d6 100644 --- a/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt @@ -1,27 +1,29 @@ package ru.myitschool.work.ui.main import android.content.Context -import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.google.gson.Gson import com.google.gson.GsonBuilder +import com.google.gson.reflect.TypeToken import createAuthHeader import createRetrofit import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import kotlinx.serialization.json.JsonObject import retrofit2.HttpException -import ru.myitschool.work.data.remote.LoginApi import ru.myitschool.work.data.remote.ErrorDto +import ru.myitschool.work.data.remote.LoginApi import ru.myitschool.work.data.remote.PersonInfoDto import ru.myitschool.work.di.AppModule import java.text.SimpleDateFormat import javax.inject.Inject + @HiltViewModel class MainViewModel @Inject constructor( @ApplicationContext private val context: Context, @@ -79,6 +81,44 @@ class MainViewModel @Inject constructor( } } + +// fun loadHistory(username: String, password : String): List { +// viewModelScope.launch { +// try { +// val authHeader = createAuthHeader(username = username, password= password) +// val entries = loginApi.entries(authHeader, username) +//// val personEntries = entries.body()?.let { responseBody -> +//// GsonBuilder().create().fromJson(responseBody.string(), EntryClass::class.java) +//// } +//// val personEntries = Gson().fromJson() +// +// val gson = Gson() +// val listType = object : TypeToken>() {}.type +// val logEntries: List = gson.fromJson(entries.body()?.string() , listType) +// +// +//// return logEntries +// } catch (httpException: HttpException) { +// try { +// httpException.response()?.errorBody()?.string()?.let { errorString -> +// val gson = GsonBuilder().create() +// val errorDto = gson.fromJson(errorString, ErrorDto::class.java) +// _state.update { +// MainState( +// error = errorDto.error +// ) +// } +// } +// } catch (e: Exception) { +// _state.update { MainState(error = httpException.message()) } +// } +// } catch (e: Exception) { +// _state.update { MainState(error = "Unknown error: ${e.message}") } +// } +// } +// } + + fun logout(onLogout: () -> Unit) { viewModelScope.launch { dataStoreManager.setLastUsername("") diff --git a/app/src/main/java/ru/myitschool/work/ui/main/mainHistory.kt b/app/src/main/java/ru/myitschool/work/ui/main/mainHistory.kt new file mode 100644 index 0000000..4be7cb6 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/main/mainHistory.kt @@ -0,0 +1,6 @@ +package ru.myitschool.work.ui.main + +//data class mainHistory( +// val entr: Lis = "", +// val error: String? = null +//)