From e63c1c1df015ec18ef0f736416b56bc81a697dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B0=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC?= Date: Fri, 24 Nov 2023 18:05:02 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20interfac?= =?UTF-8?q?e.=20=D0=92=D1=81=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=B8?= =?UTF-8?q?=D0=BD=D1=83=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../labwork/button_navigation/MainScreen.kt | 16 +++---- .../labwork/button_navigation/Screens.kt | 8 ---- .../labwork/button_navigation/SlideGraph.kt | 14 +++--- .../labwork/pages/product/ListProduct.kt | 4 -- .../labwork/repository/BicycleRepository.kt | 41 ++++-------------- .../repository/OfflineBicycleRepository.kt | 38 ++++++++++++++++ .../repository/OfflineUserRepository.kt | 35 +++++++++++++++ .../labwork/repository/UserRepository.kt | 43 ++++--------------- .../labwork/viewmodel/BicycleViewModel.kt | 19 ++++---- .../labwork/viewmodel/UserViewModel.kt | 18 ++++---- .../factory/BicycleViewModelFactory.kt | 6 +-- .../viewmodel/factory/UserViewModelFactory.kt | 6 +-- 12 files changed, 128 insertions(+), 120 deletions(-) create mode 100644 app/src/main/java/com/example/labwork/repository/OfflineBicycleRepository.kt create mode 100644 app/src/main/java/com/example/labwork/repository/OfflineUserRepository.kt diff --git a/app/src/main/java/com/example/labwork/button_navigation/MainScreen.kt b/app/src/main/java/com/example/labwork/button_navigation/MainScreen.kt index 0bd4eb5..7964b37 100644 --- a/app/src/main/java/com/example/labwork/button_navigation/MainScreen.kt +++ b/app/src/main/java/com/example/labwork/button_navigation/MainScreen.kt @@ -8,19 +8,19 @@ import androidx.compose.runtime.remember import androidx.navigation.compose.rememberNavController import com.example.labwork.database.DAO.BicycleDao import com.example.labwork.database.DAO.UserDao -import com.example.labwork.repository.BicycleRepository -import com.example.labwork.repository.UserRepository +import com.example.labwork.repository.OfflineBicycleRepository +import com.example.labwork.repository.OfflineUserRepository @SuppressLint("UnusedMaterialScaffoldPaddingParameter") @Composable fun MainScreen(bicycleDao: BicycleDao, userDao: UserDao) { val navController = rememberNavController() - val bicycleRepository = remember { - BicycleRepository(bicycleDao) + val offlineBicycleRepository = remember { + OfflineBicycleRepository(bicycleDao) } - val userRepository = remember { - UserRepository(userDao) + val offlineUserRepository = remember { + OfflineUserRepository(userDao) } Scaffold( @@ -30,8 +30,8 @@ fun MainScreen(bicycleDao: BicycleDao, userDao: UserDao) { ) { SlideGraph( navHostController = navController, - bicycleRepository = bicycleRepository, - userRepository = userRepository + offlineBicycleRepository = offlineBicycleRepository, + offlineUserRepository = offlineUserRepository ) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/labwork/button_navigation/Screens.kt b/app/src/main/java/com/example/labwork/button_navigation/Screens.kt index 2f4409c..6abfdee 100644 --- a/app/src/main/java/com/example/labwork/button_navigation/Screens.kt +++ b/app/src/main/java/com/example/labwork/button_navigation/Screens.kt @@ -1,13 +1,10 @@ package com.example.labwork.button_navigation -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed @@ -29,18 +26,13 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavHostController -import com.example.labwork.database.DAO.UserDao -import com.example.labwork.models.Bicycle import com.example.labwork.pages.ListInfo import com.example.labwork.pages.product.FormNewProduct import com.example.labwork.pages.product.ListProduct import com.example.labwork.pages.user.RegisteryOrLogin -import com.example.labwork.repository.BicycleRepository import com.example.labwork.ui.theme.LightBluePolitech import com.example.labwork.viewmodel.BicycleViewModel import com.example.labwork.viewmodel.UserViewModel -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext @Composable fun ScreenInfo() { diff --git a/app/src/main/java/com/example/labwork/button_navigation/SlideGraph.kt b/app/src/main/java/com/example/labwork/button_navigation/SlideGraph.kt index 318a5c8..97919b0 100644 --- a/app/src/main/java/com/example/labwork/button_navigation/SlideGraph.kt +++ b/app/src/main/java/com/example/labwork/button_navigation/SlideGraph.kt @@ -6,10 +6,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable -import com.example.labwork.database.DAO.BicycleDao -import com.example.labwork.database.DAO.UserDao -import com.example.labwork.repository.BicycleRepository -import com.example.labwork.repository.UserRepository +import com.example.labwork.repository.OfflineBicycleRepository +import com.example.labwork.repository.OfflineUserRepository import com.example.labwork.viewmodel.BicycleViewModel import com.example.labwork.viewmodel.UserViewModel import com.example.labwork.viewmodel.factory.BicycleViewModelFactory @@ -19,14 +17,14 @@ import com.example.labwork.viewmodel.factory.UserViewModelFactory @Composable fun SlideGraph( navHostController: NavHostController, - bicycleRepository: BicycleRepository, - userRepository: UserRepository + offlineBicycleRepository: OfflineBicycleRepository, + offlineUserRepository: OfflineUserRepository ) { val bicycleViewModel: BicycleViewModel = viewModel( - factory = BicycleViewModelFactory(bicycleRepository) + factory = BicycleViewModelFactory(offlineBicycleRepository) ) val userViewModel: UserViewModel = viewModel( - factory = UserViewModelFactory(userRepository) + factory = UserViewModelFactory(offlineUserRepository) ) NavHost(navController = navHostController, startDestination = "Profile") { diff --git a/app/src/main/java/com/example/labwork/pages/product/ListProduct.kt b/app/src/main/java/com/example/labwork/pages/product/ListProduct.kt index dcefb6d..6eb63ab 100644 --- a/app/src/main/java/com/example/labwork/pages/product/ListProduct.kt +++ b/app/src/main/java/com/example/labwork/pages/product/ListProduct.kt @@ -37,13 +37,9 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavHostController import com.example.labwork.R -import com.example.labwork.database.DAO.BicycleDao import com.example.labwork.models.Bicycle -import com.example.labwork.repository.BicycleRepository import com.example.labwork.ui.theme.LightBluePolitech import com.example.labwork.viewmodel.BicycleViewModel -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch @Composable diff --git a/app/src/main/java/com/example/labwork/repository/BicycleRepository.kt b/app/src/main/java/com/example/labwork/repository/BicycleRepository.kt index 643d863..d72d09e 100644 --- a/app/src/main/java/com/example/labwork/repository/BicycleRepository.kt +++ b/app/src/main/java/com/example/labwork/repository/BicycleRepository.kt @@ -1,38 +1,13 @@ package com.example.labwork.repository -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.example.labwork.database.DAO.BicycleDao import com.example.labwork.models.Bicycle -import com.example.labwork.viewmodel.BicycleViewModel -class BicycleRepository(private val bicycleDao: BicycleDao) { - suspend fun insertBicycle(bicycle: Bicycle) { - bicycleDao.insertBicycle(bicycle) - } - - suspend fun updateBicycle(bicycle: Bicycle) { - bicycleDao.updateBicycle(bicycle) - } - - suspend fun deleteBicycle(bicycle: Bicycle) { - bicycleDao.deleteBicycle(bicycle) - } - - suspend fun getAllBicycles(): List { - return bicycleDao.getAllBicycles() - } - - suspend fun getBicyclesByUserId(userId: Int): List { - return bicycleDao.getBicyclesByUserId(userId) - } - suspend fun getBicycleById(bicycleId: Int?): Bicycle { - return bicycleDao.getBicycleById(bicycleId) - } - suspend fun getBicyclesByPage(pageNumber: Int, pageSize: Int): List { - val offset = (pageNumber - 1) * pageSize - return bicycleDao.getBicyclesByPage(offset, pageSize) - } +interface BicycleRepository { + suspend fun insertBicycle(bicycle: Bicycle) + suspend fun updateBicycle(bicycle: Bicycle) + suspend fun deleteBicycle(bicycle: Bicycle) + suspend fun getAllBicycles(): List + suspend fun getBicyclesByUserId(userId: Int): List + suspend fun getBicycleById(bicycleId: Int?): Bicycle + suspend fun getBicyclesByPage(pageNumber: Int, pageSize: Int): List } - - diff --git a/app/src/main/java/com/example/labwork/repository/OfflineBicycleRepository.kt b/app/src/main/java/com/example/labwork/repository/OfflineBicycleRepository.kt new file mode 100644 index 0000000..f1b61f2 --- /dev/null +++ b/app/src/main/java/com/example/labwork/repository/OfflineBicycleRepository.kt @@ -0,0 +1,38 @@ +package com.example.labwork.repository + +import com.example.labwork.database.DAO.BicycleDao +import com.example.labwork.models.Bicycle + +class OfflineBicycleRepository(private val bicycleDao: BicycleDao) : BicycleRepository { + override suspend fun insertBicycle(bicycle: Bicycle) { + bicycleDao.insertBicycle(bicycle) + } + + override suspend fun updateBicycle(bicycle: Bicycle) { + bicycleDao.updateBicycle(bicycle) + } + + override suspend fun deleteBicycle(bicycle: Bicycle) { + bicycleDao.deleteBicycle(bicycle) + } + + override suspend fun getAllBicycles(): List { + return bicycleDao.getAllBicycles() + } + + override suspend fun getBicyclesByUserId(userId: Int): List { + return bicycleDao.getBicyclesByUserId(userId) + } + + override suspend fun getBicycleById(bicycleId: Int?): Bicycle { + return bicycleDao.getBicycleById(bicycleId) + } + + override suspend fun getBicyclesByPage(pageNumber: Int, pageSize: Int): List { + val offset = (pageNumber - 1) * pageSize + return bicycleDao.getBicyclesByPage(offset, pageSize) + } +} + + + diff --git a/app/src/main/java/com/example/labwork/repository/OfflineUserRepository.kt b/app/src/main/java/com/example/labwork/repository/OfflineUserRepository.kt new file mode 100644 index 0000000..70fcd48 --- /dev/null +++ b/app/src/main/java/com/example/labwork/repository/OfflineUserRepository.kt @@ -0,0 +1,35 @@ +package com.example.labwork.repository + +import com.example.labwork.database.DAO.UserDao +import com.example.labwork.models.User + +class OfflineUserRepository(private val userDao: UserDao) : UserRepository { + override suspend fun getAllUsers(): List { + return userDao.getAllUsers() + } + + override suspend fun insertUser(user: User) { + userDao.insertUser(user) + } + + override suspend fun updateUser(user: User) { + userDao.updateUser(user) + } + + override suspend fun deleteUser(user: User) { + userDao.deleteUser(user) + } + + override suspend fun getUserById(userId: Int): User { + return userDao.getUserById(userId) + } + + override suspend fun getUserByEmail(email: String): User { + return userDao.getUserByEmail(email) + } + + override suspend fun getUserByEmailAndPassword(email: String, password: String): User? { + return userDao.getUserByEmailAndPassword(email, password) + } +} + diff --git a/app/src/main/java/com/example/labwork/repository/UserRepository.kt b/app/src/main/java/com/example/labwork/repository/UserRepository.kt index de815e5..919bd1d 100644 --- a/app/src/main/java/com/example/labwork/repository/UserRepository.kt +++ b/app/src/main/java/com/example/labwork/repository/UserRepository.kt @@ -1,38 +1,13 @@ package com.example.labwork.repository -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.example.labwork.database.DAO.UserDao import com.example.labwork.models.User -import com.example.labwork.viewmodel.UserViewModel - -class UserRepository(private val userDao: UserDao) { - suspend fun getAllUsers(): List { - return userDao.getAllUsers() - } - - suspend fun insertUser(user: User) { - userDao.insertUser(user) - } - - suspend fun updateUser(user: User) { - userDao.updateUser(user) - } - - suspend fun deleteUser(user: User) { - userDao.deleteUser(user) - } - - suspend fun getUserById(userId: Int): User { - return userDao.getUserById(userId) - } - - suspend fun getUserByEmail(email: String): User { - return userDao.getUserByEmail(email) - } - - suspend fun getUserByEmailAndPassword(email: String, password: String): User? { - return userDao.getUserByEmailAndPassword(email, password) - } -} +interface UserRepository { + suspend fun getAllUsers(): List + suspend fun insertUser(user: User) + suspend fun updateUser(user: User) + suspend fun deleteUser(user: User) + suspend fun getUserById(userId: Int): User + suspend fun getUserByEmail(email: String): User + suspend fun getUserByEmailAndPassword(email: String, password: String): User? +} \ No newline at end of file diff --git a/app/src/main/java/com/example/labwork/viewmodel/BicycleViewModel.kt b/app/src/main/java/com/example/labwork/viewmodel/BicycleViewModel.kt index dc41360..aef874b 100644 --- a/app/src/main/java/com/example/labwork/viewmodel/BicycleViewModel.kt +++ b/app/src/main/java/com/example/labwork/viewmodel/BicycleViewModel.kt @@ -1,16 +1,15 @@ package com.example.labwork.viewmodel -import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.labwork.models.Bicycle -import com.example.labwork.repository.BicycleRepository +import com.example.labwork.repository.OfflineBicycleRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch -class BicycleViewModel(private val bicycleRepository: BicycleRepository) : ViewModel() { +class BicycleViewModel(private val offlineBicycleRepository: OfflineBicycleRepository) : ViewModel() { private val _bicycles = MutableLiveData>() val bicycles: StateFlow> = MutableStateFlow(emptyList()) @@ -19,7 +18,7 @@ class BicycleViewModel(private val bicycleRepository: BicycleRepository) : ViewM fun fetchBicyclesByPage(pageNumber: Int, pageSize: Int) { viewModelScope.launch { - val fetchedBicycles = bicycleRepository.getBicyclesByPage(pageNumber, pageSize) + val fetchedBicycles = offlineBicycleRepository.getBicyclesByPage(pageNumber, pageSize) _bicycles.value = fetchedBicycles } } @@ -34,37 +33,37 @@ class BicycleViewModel(private val bicycleRepository: BicycleRepository) : ViewM fun fetchBicycles() { viewModelScope.launch { - val fetchedBicycles = bicycleRepository.getAllBicycles() + val fetchedBicycles = offlineBicycleRepository.getAllBicycles() (bicycles as MutableStateFlow).value = fetchedBicycles } } fun getAllBicycles() { viewModelScope.launch { - _bicycles.value = bicycleRepository.getAllBicycles() + _bicycles.value = offlineBicycleRepository.getAllBicycles() } } fun getBicycleById(bicycleId: Int) { viewModelScope.launch { - val bicycle = bicycleRepository.getBicycleById(bicycleId) + val bicycle = offlineBicycleRepository.getBicycleById(bicycleId) } } fun insertBicycle(bicycle: Bicycle) { viewModelScope.launch { - bicycleRepository.insertBicycle(bicycle) + offlineBicycleRepository.insertBicycle(bicycle) } } fun updateBicycle(bicycle: Bicycle) { viewModelScope.launch { - bicycleRepository.updateBicycle(bicycle) + offlineBicycleRepository.updateBicycle(bicycle) } } fun deleteBicycle(bicycle: Bicycle) { viewModelScope.launch { - bicycleRepository.deleteBicycle(bicycle) + offlineBicycleRepository.deleteBicycle(bicycle) } } } diff --git a/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt b/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt index 7977e04..a5916a7 100644 --- a/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt +++ b/app/src/main/java/com/example/labwork/viewmodel/UserViewModel.kt @@ -5,52 +5,52 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.labwork.models.User -import com.example.labwork.repository.UserRepository +import com.example.labwork.repository.OfflineUserRepository import kotlinx.coroutines.launch -class UserViewModel(private val userRepository: UserRepository) : ViewModel() { +class UserViewModel(private val offlineUserRepository: OfflineUserRepository) : ViewModel() { private val _users = MutableLiveData>() val users: LiveData> get() = _users fun getAllUsers() { viewModelScope.launch { - _users.value = userRepository.getAllUsers() + _users.value = offlineUserRepository.getAllUsers() } } fun getUserById(userId: Int) { viewModelScope.launch { - val user = userRepository.getUserById(userId) + val user = offlineUserRepository.getUserById(userId) } } fun insertUser(user: User) { viewModelScope.launch { - userRepository.insertUser(user) + offlineUserRepository.insertUser(user) } } fun updateUser(user: User) { viewModelScope.launch { - userRepository.updateUser(user) + offlineUserRepository.updateUser(user) } } fun deleteUser(user: User) { viewModelScope.launch { - userRepository.deleteUser(user) + offlineUserRepository.deleteUser(user) } } suspend fun login(email: String, password: String): Boolean { var isSuccess = false - val user = userRepository.getUserByEmail(email) + val user = offlineUserRepository.getUserByEmail(email) isSuccess = user != null && user.password == password return isSuccess } suspend fun getUserByEmail(email: String): User? { - return userRepository.getUserByEmail(email) + return offlineUserRepository.getUserByEmail(email) } } diff --git a/app/src/main/java/com/example/labwork/viewmodel/factory/BicycleViewModelFactory.kt b/app/src/main/java/com/example/labwork/viewmodel/factory/BicycleViewModelFactory.kt index 4ef11ba..e07f1cb 100644 --- a/app/src/main/java/com/example/labwork/viewmodel/factory/BicycleViewModelFactory.kt +++ b/app/src/main/java/com/example/labwork/viewmodel/factory/BicycleViewModelFactory.kt @@ -2,13 +2,13 @@ package com.example.labwork.viewmodel.factory import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.example.labwork.repository.BicycleRepository +import com.example.labwork.repository.OfflineBicycleRepository import com.example.labwork.viewmodel.BicycleViewModel -class BicycleViewModelFactory(private val bicycleRepository: BicycleRepository): ViewModelProvider.Factory { +class BicycleViewModelFactory(private val offlineBicycleRepository: OfflineBicycleRepository): ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(BicycleViewModel::class.java)) { - return BicycleViewModel(bicycleRepository) as T + return BicycleViewModel(offlineBicycleRepository) as T } throw IllegalArgumentException("Unknown ViewModel class") } diff --git a/app/src/main/java/com/example/labwork/viewmodel/factory/UserViewModelFactory.kt b/app/src/main/java/com/example/labwork/viewmodel/factory/UserViewModelFactory.kt index b2096f0..73556fe 100644 --- a/app/src/main/java/com/example/labwork/viewmodel/factory/UserViewModelFactory.kt +++ b/app/src/main/java/com/example/labwork/viewmodel/factory/UserViewModelFactory.kt @@ -2,13 +2,13 @@ package com.example.labwork.viewmodel.factory import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.example.labwork.repository.UserRepository +import com.example.labwork.repository.OfflineUserRepository import com.example.labwork.viewmodel.UserViewModel -class UserViewModelFactory(private val userRepository: UserRepository): ViewModelProvider.Factory { +class UserViewModelFactory(private val offlineUserRepository: OfflineUserRepository): ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(UserViewModel::class.java)) { - return UserViewModel(userRepository) as T + return UserViewModel(offlineUserRepository) as T } throw IllegalArgumentException("Unknown ViewModel class") }