Создал interface. Все перекинул
This commit is contained in:
parent
e96160ad7d
commit
e63c1c1df0
@ -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
|
||||
)
|
||||
}
|
||||
}
|
@ -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() {
|
||||
|
@ -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") {
|
||||
|
@ -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
|
||||
|
@ -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<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)
|
||||
}
|
||||
interface BicycleRepository {
|
||||
suspend fun insertBicycle(bicycle: 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>
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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<User> {
|
||||
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<User>
|
||||
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?
|
||||
}
|
@ -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<List<Bicycle>>()
|
||||
val bicycles: StateFlow<List<Bicycle>> = 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<List<User>>()
|
||||
val users: LiveData<List<User>> 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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
if (modelClass.isAssignableFrom(BicycleViewModel::class.java)) {
|
||||
return BicycleViewModel(bicycleRepository) as T
|
||||
return BicycleViewModel(offlineBicycleRepository) as T
|
||||
}
|
||||
throw IllegalArgumentException("Unknown ViewModel class")
|
||||
}
|
||||
|
@ -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 <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
if (modelClass.isAssignableFrom(UserViewModel::class.java)) {
|
||||
return UserViewModel(userRepository) as T
|
||||
return UserViewModel(offlineUserRepository) as T
|
||||
}
|
||||
throw IllegalArgumentException("Unknown ViewModel class")
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user