From f772c4cb7281ef271a5ed9f14115d767c77951ee Mon Sep 17 00:00:00 2001
From: yastruckov <yastruckov@yandex.ru>
Date: Wed, 19 Feb 2025 12:59:20 +0300
Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20?=
 =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BF?=
 =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB?=
 =?UTF-8?q?=D1=8F,=20=D1=84=D0=B8=D0=BA=D1=81=20=D0=B1=D0=B0=D0=B3=D0=B0,?=
 =?UTF-8?q?=20=D1=87=D1=82=D0=BE=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?=
 =?UTF-8?q?=D0=A4=D0=98=D0=9E=20=D0=B2=20=D0=BF=D1=80=D0=BE=D1=84=D0=B8?=
 =?UTF-8?q?=D0=BB=D1=8C=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B8=D0=BB=D1=81?=
 =?UTF-8?q?=D1=8F=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../{VisitDTO.kt => EmployeeEntranceDTO.kt}   |  7 ++--
 ...TO.kt => EmployeeEntranceListPagingDTO.kt} |  4 +-
 .../ru/myitschool/work/data/dto/UserDTO.kt    |  2 +-
 .../AllEntranceListNetworkDataSource.kt       | 39 +++++++++++++++++++
 .../allEntrances/AllEntranceListRepoImpl.kt   | 24 ++++++++++++
 .../EmployeeEntranceListNetworkDataSource.kt  |  8 ++--
 .../EmployeeEntranceListRepoImpl.kt           |  7 ++--
 .../work/data/info/InfoNetworkDataSource.kt   |  4 +-
 .../myitschool/work/data/info/InfoRepoImpl.kt |  2 +-
 .../work/data/login/LoginNetworkDataSource.kt |  7 +++-
 .../allEntrances/AllEntranceListRepo.kt       |  7 ++++
 .../GetAllEmployeesEntranceList.kt            |  7 ++++
 .../EmployeeEntranceListRepo.kt               |  2 +-
 .../GetEmployeeEntranceListUseCase.kt         |  2 +-
 .../domain/entities/EmployeeEntranceEntity.kt |  8 ++--
 .../myitschool/work/ui/login/LoginFragment.kt |  2 +
 .../main/EmployeeEntranceListPagingSource.kt  |  1 +
 .../myitschool/work/ui/main/MainFragment.kt   | 21 +++++++++-
 .../myitschool/work/ui/main/MainViewModel.kt  | 35 ++++++++---------
 .../ru/myitschool/work/utils/DateConverter.kt |  2 +-
 .../myitschool/work/utils/DateSerializer.kt   |  2 +-
 .../work/utils/FragmentExtesions.kt           | 12 ++++++
 22 files changed, 160 insertions(+), 45 deletions(-)
 rename app/src/main/java/ru/myitschool/work/data/dto/{VisitDTO.kt => EmployeeEntranceDTO.kt} (53%)
 rename app/src/main/java/ru/myitschool/work/data/dto/{VisitListPagingDTO.kt => EmployeeEntranceListPagingDTO.kt} (55%)
 create mode 100644 app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListNetworkDataSource.kt
 create mode 100644 app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListRepoImpl.kt
 rename app/src/main/java/ru/myitschool/work/data/{visitsList => entrance}/employeeEntrances/EmployeeEntranceListNetworkDataSource.kt (78%)
 rename app/src/main/java/ru/myitschool/work/data/{visitsList => entrance}/employeeEntrances/EmployeeEntranceListRepoImpl.kt (72%)
 create mode 100644 app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/AllEntranceListRepo.kt
 create mode 100644 app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/GetAllEmployeesEntranceList.kt
 rename app/src/main/java/ru/myitschool/work/domain/{visitsList => employeeEntrance/employeeEntrances}/EmployeeEntranceListRepo.kt (74%)
 rename app/src/main/java/ru/myitschool/work/domain/{visitsList => employeeEntrance/employeeEntrances}/GetEmployeeEntranceListUseCase.kt (73%)

diff --git a/app/src/main/java/ru/myitschool/work/data/dto/VisitDTO.kt b/app/src/main/java/ru/myitschool/work/data/dto/EmployeeEntranceDTO.kt
similarity index 53%
rename from app/src/main/java/ru/myitschool/work/data/dto/VisitDTO.kt
rename to app/src/main/java/ru/myitschool/work/data/dto/EmployeeEntranceDTO.kt
index 2dd1e6d..c0bcfc1 100644
--- a/app/src/main/java/ru/myitschool/work/data/dto/VisitDTO.kt
+++ b/app/src/main/java/ru/myitschool/work/data/dto/EmployeeEntranceDTO.kt
@@ -6,8 +6,9 @@ import ru.myitschool.work.utils.DateSerializer
 import java.util.Date
 
 @Serializable
-data class VisitDTO(
-    @SerialName("scanTime") @Serializable(with = DateSerializer::class) val scanTime : Date?,
-    @SerialName("readerId") val readerName: String?,
+data class EmployeeEntranceDTO(
+    @SerialName("id") val id : Int?,
+    @SerialName("entryTime") @Serializable(with = DateSerializer::class) val scanTime : Date?,
+    @SerialName("readerName") val readerName: String?,
     @SerialName("type") val type: String?
 )
diff --git a/app/src/main/java/ru/myitschool/work/data/dto/VisitListPagingDTO.kt b/app/src/main/java/ru/myitschool/work/data/dto/EmployeeEntranceListPagingDTO.kt
similarity index 55%
rename from app/src/main/java/ru/myitschool/work/data/dto/VisitListPagingDTO.kt
rename to app/src/main/java/ru/myitschool/work/data/dto/EmployeeEntranceListPagingDTO.kt
index 73130d6..26edbc1 100644
--- a/app/src/main/java/ru/myitschool/work/data/dto/VisitListPagingDTO.kt
+++ b/app/src/main/java/ru/myitschool/work/data/dto/EmployeeEntranceListPagingDTO.kt
@@ -4,6 +4,6 @@ import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
 
 @Serializable
-data class VisitListPagingDTO(
-    @SerialName("content") val content : List<VisitDTO>?
+data class EmployeeEntranceListPagingDTO(
+    @SerialName("content") val content : List<EmployeeEntranceDTO>?
 )
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
index d2a74c4..844d6f1 100644
--- a/app/src/main/java/ru/myitschool/work/data/dto/UserDTO.kt
+++ b/app/src/main/java/ru/myitschool/work/data/dto/UserDTO.kt
@@ -9,7 +9,7 @@ data class UserDTO(
     @SerialName("login") val login: String?,
     @SerialName("name") val name: String?,
     @SerialName("authority") val authority : String?,
-    @SerialName("photo") val photoUrl: String?,
+    @SerialName("photoUrl") val photoUrl: String?,
     @SerialName("position") val position: String?
 )
 
diff --git a/app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListNetworkDataSource.kt b/app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListNetworkDataSource.kt
new file mode 100644
index 0000000..84469f7
--- /dev/null
+++ b/app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListNetworkDataSource.kt
@@ -0,0 +1,39 @@
+package ru.myitschool.work.data.entrance.allEntrances
+
+import android.content.Context
+import io.ktor.client.call.body
+import io.ktor.client.request.basicAuth
+import io.ktor.client.request.get
+import io.ktor.http.HttpStatusCode
+import io.ktor.http.headers
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.withContext
+import ru.myitschool.work.core.Constants
+import ru.myitschool.work.data.UserDataStoreManager
+import ru.myitschool.work.data.dto.EmployeeEntranceListPagingDTO
+import ru.myitschool.work.utils.NetworkModule
+
+class AllEntranceListNetworkDataSource(
+    context: Context
+) {
+    private val client = NetworkModule.httpClient
+    private val userDataStoreManager = UserDataStoreManager.getInstance(context)
+    suspend fun getList(pageNum: Int, pageSize: Int):Result<EmployeeEntranceListPagingDTO> = withContext(
+        Dispatchers.IO){
+        runCatching {
+            val username = userDataStoreManager.usernameFlow.first()
+            val password = userDataStoreManager.passwordFlow.first()
+            val result = client.get("${Constants.SERVER_ADDRESS}/api/entrance/all?page=$pageNum&size=$pageSize"){
+                headers{
+                    basicAuth(username, password)
+                }
+            }
+
+            if (result.status != HttpStatusCode.OK) {
+                error("Status ${result.status}")
+            }
+            result.body()
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListRepoImpl.kt b/app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListRepoImpl.kt
new file mode 100644
index 0000000..1a7db28
--- /dev/null
+++ b/app/src/main/java/ru/myitschool/work/data/entrance/allEntrances/AllEntranceListRepoImpl.kt
@@ -0,0 +1,24 @@
+package ru.myitschool.work.data.entrance.allEntrances
+
+import ru.myitschool.work.domain.employeeEntrance.allEntrances.AllEntranceListRepo
+import ru.myitschool.work.domain.entities.EmployeeEntranceEntity
+
+class AllEntranceListRepoImpl(
+    private val networkDataSource: AllEntranceListNetworkDataSource
+) : AllEntranceListRepo {
+    override suspend fun getList(
+        pageNum: Int,
+        pageSize: Int
+    ): Result<List<EmployeeEntranceEntity>> {
+        return networkDataSource.getList(pageNum, pageSize).map { pagingDTO ->
+            pagingDTO.content?.mapNotNull { dto ->
+                EmployeeEntranceEntity(
+                    id = dto.id ?: return@mapNotNull null,
+                    scanTime = dto.scanTime ?: return@mapNotNull null,
+                    readerName = dto.readerName ?: return@mapNotNull null,
+                    type = dto.type ?: return@mapNotNull null
+                )
+            }?: return Result.failure(IllegalStateException("List parse error"))
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/myitschool/work/data/visitsList/employeeEntrances/EmployeeEntranceListNetworkDataSource.kt b/app/src/main/java/ru/myitschool/work/data/entrance/employeeEntrances/EmployeeEntranceListNetworkDataSource.kt
similarity index 78%
rename from app/src/main/java/ru/myitschool/work/data/visitsList/employeeEntrances/EmployeeEntranceListNetworkDataSource.kt
rename to app/src/main/java/ru/myitschool/work/data/entrance/employeeEntrances/EmployeeEntranceListNetworkDataSource.kt
index 335f3c9..1ce9725 100644
--- a/app/src/main/java/ru/myitschool/work/data/visitsList/employeeEntrances/EmployeeEntranceListNetworkDataSource.kt
+++ b/app/src/main/java/ru/myitschool/work/data/entrance/employeeEntrances/EmployeeEntranceListNetworkDataSource.kt
@@ -1,9 +1,10 @@
-package ru.myitschool.work.data.visitsList.employeeEntrances
+package ru.myitschool.work.data.entrance.employeeEntrances
 
 import android.content.Context
 import io.ktor.client.call.body
 import io.ktor.client.request.basicAuth
 import io.ktor.client.request.get
+import io.ktor.client.statement.bodyAsText
 import io.ktor.http.HttpStatusCode
 import io.ktor.http.headers
 import kotlinx.coroutines.Dispatchers
@@ -11,7 +12,7 @@ import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.withContext
 import ru.myitschool.work.core.Constants
 import ru.myitschool.work.data.UserDataStoreManager
-import ru.myitschool.work.data.dto.VisitListPagingDTO
+import ru.myitschool.work.data.dto.EmployeeEntranceListPagingDTO
 import ru.myitschool.work.utils.NetworkModule
 
 class EmployeeEntranceListNetworkDataSource(
@@ -19,7 +20,7 @@ class EmployeeEntranceListNetworkDataSource(
 ){
     private val client = NetworkModule.httpClient
     private val userDataStoreManager = UserDataStoreManager.getInstance(context)
-    suspend fun getList(pageNum: Int, pageSize: Int):Result<VisitListPagingDTO> = withContext(Dispatchers.IO){
+    suspend fun getList(pageNum: Int, pageSize: Int):Result<EmployeeEntranceListPagingDTO> = withContext(Dispatchers.IO){
         runCatching {
             val username = userDataStoreManager.usernameFlow.first()
             val password = userDataStoreManager.passwordFlow.first()
@@ -32,6 +33,7 @@ class EmployeeEntranceListNetworkDataSource(
             if (result.status != HttpStatusCode.OK) {
                 error("Status ${result.status}")
             }
+            println(result.bodyAsText())
             result.body()
         }
     }
diff --git a/app/src/main/java/ru/myitschool/work/data/visitsList/employeeEntrances/EmployeeEntranceListRepoImpl.kt b/app/src/main/java/ru/myitschool/work/data/entrance/employeeEntrances/EmployeeEntranceListRepoImpl.kt
similarity index 72%
rename from app/src/main/java/ru/myitschool/work/data/visitsList/employeeEntrances/EmployeeEntranceListRepoImpl.kt
rename to app/src/main/java/ru/myitschool/work/data/entrance/employeeEntrances/EmployeeEntranceListRepoImpl.kt
index 0b9ea26..4761046 100644
--- a/app/src/main/java/ru/myitschool/work/data/visitsList/employeeEntrances/EmployeeEntranceListRepoImpl.kt
+++ b/app/src/main/java/ru/myitschool/work/data/entrance/employeeEntrances/EmployeeEntranceListRepoImpl.kt
@@ -1,7 +1,7 @@
-package ru.myitschool.work.data.visitsList.employeeEntrances
+package ru.myitschool.work.data.entrance.employeeEntrances
 
 import ru.myitschool.work.domain.entities.EmployeeEntranceEntity
-import ru.myitschool.work.domain.visitsList.EmployeeEntranceListRepo
+import ru.myitschool.work.domain.employeeEntrance.employeeEntrances.EmployeeEntranceListRepo
 
 class EmployeeEntranceListRepoImpl(
     private val networkDataSource: EmployeeEntranceListNetworkDataSource
@@ -10,9 +10,10 @@ class EmployeeEntranceListRepoImpl(
         return networkDataSource.getList(pageNum, pageSize).map { pagingDTO ->
             pagingDTO.content?.mapNotNull { dto->
                 EmployeeEntranceEntity(
+                    id = dto.id ?: return@mapNotNull null,
                     scanTime = dto.scanTime ?: return@mapNotNull null,
                     readerName = dto.readerName ?: return@mapNotNull null,
-                    type = dto.type ?: return@mapNotNull null
+                    type = dto.type ?: return@mapNotNull null,
                 )
             }?: return Result.failure(IllegalStateException("List parse error"))
         }
diff --git a/app/src/main/java/ru/myitschool/work/data/info/InfoNetworkDataSource.kt b/app/src/main/java/ru/myitschool/work/data/info/InfoNetworkDataSource.kt
index 99eb908..d8ffa2d 100644
--- a/app/src/main/java/ru/myitschool/work/data/info/InfoNetworkDataSource.kt
+++ b/app/src/main/java/ru/myitschool/work/data/info/InfoNetworkDataSource.kt
@@ -3,7 +3,7 @@ package ru.myitschool.work.data.info
 import android.content.Context
 import io.ktor.client.call.body
 import io.ktor.client.request.basicAuth
-import io.ktor.client.request.get
+import io.ktor.client.request.post
 import io.ktor.client.statement.bodyAsText
 import io.ktor.http.HttpStatusCode
 import io.ktor.http.headers
@@ -25,7 +25,7 @@ class InfoNetworkDataSource(
         runCatching {
             val username = userDataStoreManager.usernameFlow.first()
             val password = userDataStoreManager.passwordFlow.first()
-            val result = client.get("${Constants.SERVER_ADDRESS}/api/employee/profile"){
+            val result = client.post("${Constants.SERVER_ADDRESS}/api/employee/profile"){
                 headers{
                     basicAuth(username, password)
                 }
diff --git a/app/src/main/java/ru/myitschool/work/data/info/InfoRepoImpl.kt b/app/src/main/java/ru/myitschool/work/data/info/InfoRepoImpl.kt
index bfb70ff..d6e3f94 100644
--- a/app/src/main/java/ru/myitschool/work/data/info/InfoRepoImpl.kt
+++ b/app/src/main/java/ru/myitschool/work/data/info/InfoRepoImpl.kt
@@ -11,7 +11,7 @@ class InfoRepoImpl(
             UserEntity(
                 id = dto.id ?: 0,
                 login = dto.login ?: "",
-                name = dto.login ?: "",
+                name = dto.name ?: "",
                 authority = dto.authority ?: "",
                 photoUrl = dto.photoUrl,
                 position = dto.position ?: ""
diff --git a/app/src/main/java/ru/myitschool/work/data/login/LoginNetworkDataSource.kt b/app/src/main/java/ru/myitschool/work/data/login/LoginNetworkDataSource.kt
index 40b5e82..a2b92f2 100644
--- a/app/src/main/java/ru/myitschool/work/data/login/LoginNetworkDataSource.kt
+++ b/app/src/main/java/ru/myitschool/work/data/login/LoginNetworkDataSource.kt
@@ -2,7 +2,8 @@ package ru.myitschool.work.data.login
 
 import io.ktor.client.call.body
 import io.ktor.client.request.basicAuth
-import io.ktor.client.request.get
+import io.ktor.client.request.post
+import io.ktor.client.statement.bodyAsText
 import io.ktor.http.HttpStatusCode
 import io.ktor.http.headers
 import kotlinx.coroutines.Dispatchers
@@ -14,7 +15,8 @@ class LoginNetworkDataSource {
     private val client = NetworkModule.httpClient
     suspend fun login(username: String, password: String):Result<Unit> = withContext(Dispatchers.IO){
         runCatching {
-            val result = client.get("${Constants.SERVER_ADDRESS}/api/employee/login"){
+            println("$username $password")
+            val result = client.post("${Constants.SERVER_ADDRESS}/api/employee/login"){
                 headers{
                     basicAuth(username, password)
                 }
@@ -22,6 +24,7 @@ class LoginNetworkDataSource {
             if (result.status != HttpStatusCode.OK) {
                 error("Status ${result.status}")
             }
+            println(result.bodyAsText())
             result.body()
         }
     }
diff --git a/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/AllEntranceListRepo.kt b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/AllEntranceListRepo.kt
new file mode 100644
index 0000000..8192537
--- /dev/null
+++ b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/AllEntranceListRepo.kt
@@ -0,0 +1,7 @@
+package ru.myitschool.work.domain.employeeEntrance.allEntrances
+
+import ru.myitschool.work.domain.entities.EmployeeEntranceEntity
+
+interface AllEntranceListRepo {
+    suspend fun getList(pageNum : Int, pageSize: Int) : Result<List<EmployeeEntranceEntity>>
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/GetAllEmployeesEntranceList.kt b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/GetAllEmployeesEntranceList.kt
new file mode 100644
index 0000000..48351d2
--- /dev/null
+++ b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/allEntrances/GetAllEmployeesEntranceList.kt
@@ -0,0 +1,7 @@
+package ru.myitschool.work.domain.employeeEntrance.allEntrances
+
+class GetAllEmployeesEntranceList(
+    private val repo: AllEntranceListRepo
+) {
+    suspend operator fun invoke(pageNum : Int, pageSize: Int) = repo.getList(pageNum, pageSize)
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/myitschool/work/domain/visitsList/EmployeeEntranceListRepo.kt b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/employeeEntrances/EmployeeEntranceListRepo.kt
similarity index 74%
rename from app/src/main/java/ru/myitschool/work/domain/visitsList/EmployeeEntranceListRepo.kt
rename to app/src/main/java/ru/myitschool/work/domain/employeeEntrance/employeeEntrances/EmployeeEntranceListRepo.kt
index 22957cc..5e33695 100644
--- a/app/src/main/java/ru/myitschool/work/domain/visitsList/EmployeeEntranceListRepo.kt
+++ b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/employeeEntrances/EmployeeEntranceListRepo.kt
@@ -1,4 +1,4 @@
-package ru.myitschool.work.domain.visitsList
+package ru.myitschool.work.domain.employeeEntrance.employeeEntrances
 
 import ru.myitschool.work.domain.entities.EmployeeEntranceEntity
 
diff --git a/app/src/main/java/ru/myitschool/work/domain/visitsList/GetEmployeeEntranceListUseCase.kt b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/employeeEntrances/GetEmployeeEntranceListUseCase.kt
similarity index 73%
rename from app/src/main/java/ru/myitschool/work/domain/visitsList/GetEmployeeEntranceListUseCase.kt
rename to app/src/main/java/ru/myitschool/work/domain/employeeEntrance/employeeEntrances/GetEmployeeEntranceListUseCase.kt
index be24827..f3720f3 100644
--- a/app/src/main/java/ru/myitschool/work/domain/visitsList/GetEmployeeEntranceListUseCase.kt
+++ b/app/src/main/java/ru/myitschool/work/domain/employeeEntrance/employeeEntrances/GetEmployeeEntranceListUseCase.kt
@@ -1,4 +1,4 @@
-package ru.myitschool.work.domain.visitsList
+package ru.myitschool.work.domain.employeeEntrance.employeeEntrances
 
 class GetEmployeeEntranceListUseCase(
     private val repo: EmployeeEntranceListRepo
diff --git a/app/src/main/java/ru/myitschool/work/domain/entities/EmployeeEntranceEntity.kt b/app/src/main/java/ru/myitschool/work/domain/entities/EmployeeEntranceEntity.kt
index 91b9830..c131462 100644
--- a/app/src/main/java/ru/myitschool/work/domain/entities/EmployeeEntranceEntity.kt
+++ b/app/src/main/java/ru/myitschool/work/domain/entities/EmployeeEntranceEntity.kt
@@ -1,9 +1,9 @@
 package ru.myitschool.work.domain.entities
-
 import java.util.Date
 
 data class EmployeeEntranceEntity(
-    val scanTime : Date,
-    val readerName: String,
-    val type: String
+    val id : Int?,
+    val scanTime : Date?,
+    val readerName: String?,
+    val type: String?
 )
diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt
index bb17210..89b273a 100644
--- a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt
@@ -36,6 +36,8 @@ class LoginFragment : Fragment(R.layout.fragment_login) {
             }
         }
         binding.username.addTextChangedListener(textWatcher)
+        binding.password.addTextChangedListener(textWatcher)
+
         binding.loginBtn.isEnabled = false
         binding.loginBtn.setOnClickListener{
             viewModel.login(binding.username.text.toString(), binding.password.text.toString())
diff --git a/app/src/main/java/ru/myitschool/work/ui/main/EmployeeEntranceListPagingSource.kt b/app/src/main/java/ru/myitschool/work/ui/main/EmployeeEntranceListPagingSource.kt
index 58662c2..feaa7cd 100644
--- a/app/src/main/java/ru/myitschool/work/ui/main/EmployeeEntranceListPagingSource.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/main/EmployeeEntranceListPagingSource.kt
@@ -28,6 +28,7 @@ class EmployeeEntranceListPagingSource(
 
             },
             onFailure = { e->
+                println(e)
                 LoadResult.Error(e)
             }
         )
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 25a4f5d..204e074 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
@@ -8,6 +8,7 @@ import androidx.fragment.app.setFragmentResultListener
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.lifecycleScope
 import androidx.navigation.fragment.findNavController
+import androidx.paging.LoadState
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.squareup.picasso.Picasso
 import kotlinx.coroutines.delay
@@ -18,6 +19,7 @@ import ru.myitschool.work.domain.entities.UserEntity
 import ru.myitschool.work.ui.qr.scan.QrScanDestination
 import ru.myitschool.work.utils.UserState
 import ru.myitschool.work.utils.collectWhenStarted
+import ru.myitschool.work.utils.collectWithLifecycle
 
 class MainFragment : Fragment(R.layout.fragment_main) {
 
@@ -32,7 +34,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
         _binding = FragmentMainBinding.bind(view)
 
         viewModel.getUserData()
-        binding.refresh.setOnClickListener { viewModel.getUserData() }
+
         binding.logout.setOnClickListener { logout() }
         binding.scan.setOnClickListener { onScanClick() }
         viewModel.userState.collectWhenStarted(this) { state ->
@@ -60,7 +62,23 @@ class MainFragment : Fragment(R.layout.fragment_main) {
         }
         binding.content.layoutManager = LinearLayoutManager(requireContext())
         val adapter = EmployeeEntranceListAdapter()
+        binding.refresh.setOnClickListener {
+            viewModel.getUserData()
+            adapter.refresh()
+        }
         binding.content.adapter = adapter
+        viewModel.listState.collectWithLifecycle(this) { data ->
+            adapter.submitData(data)
+        }
+        adapter.loadStateFlow.collectWithLifecycle(this) { loadState ->
+            val state = loadState.refresh
+            binding.error.visibility = if (state is LoadState.Error) View.VISIBLE else View.GONE
+            binding.loading.visibility = if (state is LoadState.Loading) View.VISIBLE else View.GONE
+
+            if (state is LoadState.Error) {
+                binding.error.text = state.error.message.toString()
+            }
+        }
 
 
         setFragmentResultListener(QrScanDestination.REQUEST_KEY) { _, bundle ->
@@ -87,6 +105,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
             private fun showUserData(userEntity: UserEntity) {
                 binding.apply {
                     fullname.text = userEntity.name
+                    println(userEntity.name)
                     position.text = userEntity.position
                     Picasso.get().load(userEntity.photoUrl).into(photo)
 
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 9aece66..7cd1e3e 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
@@ -17,13 +17,11 @@ import kotlinx.coroutines.withContext
 import ru.myitschool.work.data.UserDataStoreManager
 import ru.myitschool.work.data.info.InfoNetworkDataSource
 import ru.myitschool.work.data.info.InfoRepoImpl
-import ru.myitschool.work.data.visitsList.employeeEntrances.EmployeeEntranceListNetworkDataSource
-import ru.myitschool.work.data.visitsList.employeeEntrances.EmployeeEntranceListRepoImpl
+import ru.myitschool.work.data.entrance.employeeEntrances.EmployeeEntranceListNetworkDataSource
+import ru.myitschool.work.data.entrance.employeeEntrances.EmployeeEntranceListRepoImpl
 import ru.myitschool.work.domain.info.GetInfoUseCase
-import ru.myitschool.work.domain.visitsList.GetEmployeeEntranceListUseCase
+import ru.myitschool.work.domain.employeeEntrance.employeeEntrances.GetEmployeeEntranceListUseCase
 import ru.myitschool.work.utils.UserState
-import java.text.SimpleDateFormat
-import java.util.Locale
 
 class MainViewModel(
     private val infoUseCase: GetInfoUseCase,
@@ -41,31 +39,30 @@ class MainViewModel(
         println("Creating PagingSource")
         EmployeeEntranceListPagingSource(listUseCase::invoke)
     }.flow.cachedIn(viewModelScope)
+    init {
+        viewModelScope.launch {
+            listState.collect { pagingData ->
+                if (pagingData.toString().isEmpty()) {
+                    println("No data in paging data.")
+                } else {
+                    println("Data received: $pagingData")
+                }
+            }
+        }
+    }
 
     private val _userState = MutableStateFlow<UserState>(UserState.Loading)
     val userState: StateFlow<UserState> get() = _userState
 
     private val dataStoreManager = UserDataStoreManager(application)
 
-    fun formatDate(date: String): String {
-        val inputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault())
-        val outputFormat = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault())
-        return try {
-            val formattedDate = inputFormat.parse(date)
-            if (formattedDate != null) {
-                outputFormat.format(formattedDate)
-            } else{}
-        } catch (_: Exception) {
-            "Invalid Date"
-        }.toString()
-    }
-
     fun getUserData() {
         _userState.value = UserState.Loading
         viewModelScope.launch {
             infoUseCase.invoke().fold(
                 onSuccess = { data -> _userState.value = UserState.Success(data) },
-                onFailure = { _userState.value = UserState.Error }
+                onFailure = { e -> _userState.value = UserState.Error
+                println(e)}
             )
         }
     }
diff --git a/app/src/main/java/ru/myitschool/work/utils/DateConverter.kt b/app/src/main/java/ru/myitschool/work/utils/DateConverter.kt
index b12facb..91d7210 100644
--- a/app/src/main/java/ru/myitschool/work/utils/DateConverter.kt
+++ b/app/src/main/java/ru/myitschool/work/utils/DateConverter.kt
@@ -6,7 +6,7 @@ import java.util.Locale
 
 fun dateConverter(date: Date?) : String {
     if (date != null) {
-        val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
+        val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
         println(dateFormat.format(date).toString())
         return dateFormat.format(date).toString()
 
diff --git a/app/src/main/java/ru/myitschool/work/utils/DateSerializer.kt b/app/src/main/java/ru/myitschool/work/utils/DateSerializer.kt
index 90bf308..dfe858d 100644
--- a/app/src/main/java/ru/myitschool/work/utils/DateSerializer.kt
+++ b/app/src/main/java/ru/myitschool/work/utils/DateSerializer.kt
@@ -11,7 +11,7 @@ import java.util.Date
 import java.util.Locale
 
 object DateSerializer : KSerializer<Date> {
-    private val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.US)
+    private val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US)
     override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Date", PrimitiveKind.STRING)
 
 
diff --git a/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt b/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt
index 8c99ef3..5cc563a 100644
--- a/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt
+++ b/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt
@@ -1,8 +1,10 @@
 package ru.myitschool.work.utils
 
 import androidx.fragment.app.Fragment
+import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.flowWithLifecycle
 import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.launch
 
@@ -15,4 +17,14 @@ inline fun <T> Flow<T>.collectWhenStarted(
             collector.invoke(value)
         }
     }
+}
+fun <T> Flow<T>.collectWithLifecycle(
+    fragment: Fragment,
+    function: suspend (T) -> Unit
+){
+    fragment.viewLifecycleOwner.lifecycleScope.launch {
+        fragment.repeatOnLifecycle(Lifecycle.State.STARTED) {
+            collect { function.invoke(it) }
+        }
+    }
 }
\ No newline at end of file