Создал interface. Все перекинул

This commit is contained in:
Кашин Максим 2023-11-24 18:05:02 +04:00
parent e96160ad7d
commit e63c1c1df0
12 changed files with 128 additions and 120 deletions

View File

@ -8,19 +8,19 @@ import androidx.compose.runtime.remember
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.example.labwork.database.DAO.BicycleDao import com.example.labwork.database.DAO.BicycleDao
import com.example.labwork.database.DAO.UserDao import com.example.labwork.database.DAO.UserDao
import com.example.labwork.repository.BicycleRepository import com.example.labwork.repository.OfflineBicycleRepository
import com.example.labwork.repository.UserRepository import com.example.labwork.repository.OfflineUserRepository
@SuppressLint("UnusedMaterialScaffoldPaddingParameter") @SuppressLint("UnusedMaterialScaffoldPaddingParameter")
@Composable @Composable
fun MainScreen(bicycleDao: BicycleDao, userDao: UserDao) { fun MainScreen(bicycleDao: BicycleDao, userDao: UserDao) {
val navController = rememberNavController() val navController = rememberNavController()
val bicycleRepository = remember { val offlineBicycleRepository = remember {
BicycleRepository(bicycleDao) OfflineBicycleRepository(bicycleDao)
} }
val userRepository = remember { val offlineUserRepository = remember {
UserRepository(userDao) OfflineUserRepository(userDao)
} }
Scaffold( Scaffold(
@ -30,8 +30,8 @@ fun MainScreen(bicycleDao: BicycleDao, userDao: UserDao) {
) { ) {
SlideGraph( SlideGraph(
navHostController = navController, navHostController = navController,
bicycleRepository = bicycleRepository, offlineBicycleRepository = offlineBicycleRepository,
userRepository = userRepository offlineUserRepository = offlineUserRepository
) )
} }
} }

View File

@ -1,13 +1,10 @@
package com.example.labwork.button_navigation package com.example.labwork.button_navigation
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed 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.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController 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.ListInfo
import com.example.labwork.pages.product.FormNewProduct import com.example.labwork.pages.product.FormNewProduct
import com.example.labwork.pages.product.ListProduct import com.example.labwork.pages.product.ListProduct
import com.example.labwork.pages.user.RegisteryOrLogin import com.example.labwork.pages.user.RegisteryOrLogin
import com.example.labwork.repository.BicycleRepository
import com.example.labwork.ui.theme.LightBluePolitech import com.example.labwork.ui.theme.LightBluePolitech
import com.example.labwork.viewmodel.BicycleViewModel import com.example.labwork.viewmodel.BicycleViewModel
import com.example.labwork.viewmodel.UserViewModel import com.example.labwork.viewmodel.UserViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@Composable @Composable
fun ScreenInfo() { fun ScreenInfo() {

View File

@ -6,10 +6,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import com.example.labwork.database.DAO.BicycleDao import com.example.labwork.repository.OfflineBicycleRepository
import com.example.labwork.database.DAO.UserDao import com.example.labwork.repository.OfflineUserRepository
import com.example.labwork.repository.BicycleRepository
import com.example.labwork.repository.UserRepository
import com.example.labwork.viewmodel.BicycleViewModel import com.example.labwork.viewmodel.BicycleViewModel
import com.example.labwork.viewmodel.UserViewModel import com.example.labwork.viewmodel.UserViewModel
import com.example.labwork.viewmodel.factory.BicycleViewModelFactory import com.example.labwork.viewmodel.factory.BicycleViewModelFactory
@ -19,14 +17,14 @@ import com.example.labwork.viewmodel.factory.UserViewModelFactory
@Composable @Composable
fun SlideGraph( fun SlideGraph(
navHostController: NavHostController, navHostController: NavHostController,
bicycleRepository: BicycleRepository, offlineBicycleRepository: OfflineBicycleRepository,
userRepository: UserRepository offlineUserRepository: OfflineUserRepository
) { ) {
val bicycleViewModel: BicycleViewModel = viewModel( val bicycleViewModel: BicycleViewModel = viewModel(
factory = BicycleViewModelFactory(bicycleRepository) factory = BicycleViewModelFactory(offlineBicycleRepository)
) )
val userViewModel: UserViewModel = viewModel( val userViewModel: UserViewModel = viewModel(
factory = UserViewModelFactory(userRepository) factory = UserViewModelFactory(offlineUserRepository)
) )
NavHost(navController = navHostController, startDestination = "Profile") { NavHost(navController = navHostController, startDestination = "Profile") {

View File

@ -37,13 +37,9 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import com.example.labwork.R import com.example.labwork.R
import com.example.labwork.database.DAO.BicycleDao
import com.example.labwork.models.Bicycle import com.example.labwork.models.Bicycle
import com.example.labwork.repository.BicycleRepository
import com.example.labwork.ui.theme.LightBluePolitech import com.example.labwork.ui.theme.LightBluePolitech
import com.example.labwork.viewmodel.BicycleViewModel import com.example.labwork.viewmodel.BicycleViewModel
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
@Composable @Composable

View File

@ -1,38 +1,13 @@
package com.example.labwork.repository 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.models.Bicycle
import com.example.labwork.viewmodel.BicycleViewModel
class BicycleRepository(private val bicycleDao: BicycleDao) { interface BicycleRepository {
suspend fun insertBicycle(bicycle: Bicycle) { suspend fun insertBicycle(bicycle: Bicycle)
bicycleDao.insertBicycle(bicycle) suspend fun updateBicycle(bicycle: Bicycle)
suspend fun deleteBicycle(bicycle: Bicycle)
suspend fun getAllBicycles(): List<Bicycle>
suspend fun getBicyclesByUserId(userId: Int): List<Bicycle>
suspend fun getBicycleById(bicycleId: Int?): Bicycle
suspend fun getBicyclesByPage(pageNumber: Int, pageSize: Int): List<Bicycle>
} }
suspend fun updateBicycle(bicycle: Bicycle) {
bicycleDao.updateBicycle(bicycle)
}
suspend fun deleteBicycle(bicycle: Bicycle) {
bicycleDao.deleteBicycle(bicycle)
}
suspend fun getAllBicycles(): List<Bicycle> {
return bicycleDao.getAllBicycles()
}
suspend fun getBicyclesByUserId(userId: Int): List<Bicycle> {
return bicycleDao.getBicyclesByUserId(userId)
}
suspend fun getBicycleById(bicycleId: Int?): Bicycle {
return bicycleDao.getBicycleById(bicycleId)
}
suspend fun getBicyclesByPage(pageNumber: Int, pageSize: Int): List<Bicycle> {
val offset = (pageNumber - 1) * pageSize
return bicycleDao.getBicyclesByPage(offset, pageSize)
}
}

View File

@ -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<Bicycle> {
return bicycleDao.getAllBicycles()
}
override suspend fun getBicyclesByUserId(userId: Int): List<Bicycle> {
return bicycleDao.getBicyclesByUserId(userId)
}
override suspend fun getBicycleById(bicycleId: Int?): Bicycle {
return bicycleDao.getBicycleById(bicycleId)
}
override suspend fun getBicyclesByPage(pageNumber: Int, pageSize: Int): List<Bicycle> {
val offset = (pageNumber - 1) * pageSize
return bicycleDao.getBicyclesByPage(offset, pageSize)
}
}

View File

@ -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<User> {
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)
}
}

View File

@ -1,38 +1,13 @@
package com.example.labwork.repository 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.models.User
import com.example.labwork.viewmodel.UserViewModel
class UserRepository(private val userDao: UserDao) { interface UserRepository {
suspend fun getAllUsers(): List<User> { suspend fun getAllUsers(): List<User>
return userDao.getAllUsers() 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?
} }
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)
}
}

View File

@ -1,16 +1,15 @@
package com.example.labwork.viewmodel package com.example.labwork.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.example.labwork.models.Bicycle 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.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class BicycleViewModel(private val bicycleRepository: BicycleRepository) : ViewModel() { class BicycleViewModel(private val offlineBicycleRepository: OfflineBicycleRepository) : ViewModel() {
private val _bicycles = MutableLiveData<List<Bicycle>>() private val _bicycles = MutableLiveData<List<Bicycle>>()
val bicycles: StateFlow<List<Bicycle>> = MutableStateFlow(emptyList()) val bicycles: StateFlow<List<Bicycle>> = MutableStateFlow(emptyList())
@ -19,7 +18,7 @@ class BicycleViewModel(private val bicycleRepository: BicycleRepository) : ViewM
fun fetchBicyclesByPage(pageNumber: Int, pageSize: Int) { fun fetchBicyclesByPage(pageNumber: Int, pageSize: Int) {
viewModelScope.launch { viewModelScope.launch {
val fetchedBicycles = bicycleRepository.getBicyclesByPage(pageNumber, pageSize) val fetchedBicycles = offlineBicycleRepository.getBicyclesByPage(pageNumber, pageSize)
_bicycles.value = fetchedBicycles _bicycles.value = fetchedBicycles
} }
} }
@ -34,37 +33,37 @@ class BicycleViewModel(private val bicycleRepository: BicycleRepository) : ViewM
fun fetchBicycles() { fun fetchBicycles() {
viewModelScope.launch { viewModelScope.launch {
val fetchedBicycles = bicycleRepository.getAllBicycles() val fetchedBicycles = offlineBicycleRepository.getAllBicycles()
(bicycles as MutableStateFlow).value = fetchedBicycles (bicycles as MutableStateFlow).value = fetchedBicycles
} }
} }
fun getAllBicycles() { fun getAllBicycles() {
viewModelScope.launch { viewModelScope.launch {
_bicycles.value = bicycleRepository.getAllBicycles() _bicycles.value = offlineBicycleRepository.getAllBicycles()
} }
} }
fun getBicycleById(bicycleId: Int) { fun getBicycleById(bicycleId: Int) {
viewModelScope.launch { viewModelScope.launch {
val bicycle = bicycleRepository.getBicycleById(bicycleId) val bicycle = offlineBicycleRepository.getBicycleById(bicycleId)
} }
} }
fun insertBicycle(bicycle: Bicycle) { fun insertBicycle(bicycle: Bicycle) {
viewModelScope.launch { viewModelScope.launch {
bicycleRepository.insertBicycle(bicycle) offlineBicycleRepository.insertBicycle(bicycle)
} }
} }
fun updateBicycle(bicycle: Bicycle) { fun updateBicycle(bicycle: Bicycle) {
viewModelScope.launch { viewModelScope.launch {
bicycleRepository.updateBicycle(bicycle) offlineBicycleRepository.updateBicycle(bicycle)
} }
} }
fun deleteBicycle(bicycle: Bicycle) { fun deleteBicycle(bicycle: Bicycle) {
viewModelScope.launch { viewModelScope.launch {
bicycleRepository.deleteBicycle(bicycle) offlineBicycleRepository.deleteBicycle(bicycle)
} }
} }
} }

View File

@ -5,52 +5,52 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.example.labwork.models.User import com.example.labwork.models.User
import com.example.labwork.repository.UserRepository import com.example.labwork.repository.OfflineUserRepository
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class UserViewModel(private val userRepository: UserRepository) : ViewModel() { class UserViewModel(private val offlineUserRepository: OfflineUserRepository) : ViewModel() {
private val _users = MutableLiveData<List<User>>() private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> get() = _users val users: LiveData<List<User>> get() = _users
fun getAllUsers() { fun getAllUsers() {
viewModelScope.launch { viewModelScope.launch {
_users.value = userRepository.getAllUsers() _users.value = offlineUserRepository.getAllUsers()
} }
} }
fun getUserById(userId: Int) { fun getUserById(userId: Int) {
viewModelScope.launch { viewModelScope.launch {
val user = userRepository.getUserById(userId) val user = offlineUserRepository.getUserById(userId)
} }
} }
fun insertUser(user: User) { fun insertUser(user: User) {
viewModelScope.launch { viewModelScope.launch {
userRepository.insertUser(user) offlineUserRepository.insertUser(user)
} }
} }
fun updateUser(user: User) { fun updateUser(user: User) {
viewModelScope.launch { viewModelScope.launch {
userRepository.updateUser(user) offlineUserRepository.updateUser(user)
} }
} }
fun deleteUser(user: User) { fun deleteUser(user: User) {
viewModelScope.launch { viewModelScope.launch {
userRepository.deleteUser(user) offlineUserRepository.deleteUser(user)
} }
} }
suspend fun login(email: String, password: String): Boolean { suspend fun login(email: String, password: String): Boolean {
var isSuccess = false var isSuccess = false
val user = userRepository.getUserByEmail(email) val user = offlineUserRepository.getUserByEmail(email)
isSuccess = user != null && user.password == password isSuccess = user != null && user.password == password
return isSuccess return isSuccess
} }
suspend fun getUserByEmail(email: String): User? { suspend fun getUserByEmail(email: String): User? {
return userRepository.getUserByEmail(email) return offlineUserRepository.getUserByEmail(email)
} }
} }

View File

@ -2,13 +2,13 @@ package com.example.labwork.viewmodel.factory
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.labwork.repository.BicycleRepository import com.example.labwork.repository.OfflineBicycleRepository
import com.example.labwork.viewmodel.BicycleViewModel import com.example.labwork.viewmodel.BicycleViewModel
class BicycleViewModelFactory(private val bicycleRepository: BicycleRepository): ViewModelProvider.Factory { class BicycleViewModelFactory(private val offlineBicycleRepository: OfflineBicycleRepository): ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T { override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(BicycleViewModel::class.java)) { if (modelClass.isAssignableFrom(BicycleViewModel::class.java)) {
return BicycleViewModel(bicycleRepository) as T return BicycleViewModel(offlineBicycleRepository) as T
} }
throw IllegalArgumentException("Unknown ViewModel class") throw IllegalArgumentException("Unknown ViewModel class")
} }

View File

@ -2,13 +2,13 @@ package com.example.labwork.viewmodel.factory
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.labwork.repository.UserRepository import com.example.labwork.repository.OfflineUserRepository
import com.example.labwork.viewmodel.UserViewModel import com.example.labwork.viewmodel.UserViewModel
class UserViewModelFactory(private val userRepository: UserRepository): ViewModelProvider.Factory { class UserViewModelFactory(private val offlineUserRepository: OfflineUserRepository): ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T { override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(UserViewModel::class.java)) { if (modelClass.isAssignableFrom(UserViewModel::class.java)) {
return UserViewModel(userRepository) as T return UserViewModel(offlineUserRepository) as T
} }
throw IllegalArgumentException("Unknown ViewModel class") throw IllegalArgumentException("Unknown ViewModel class")
} }