Создал 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 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
)
}
}

View File

@ -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() {

View File

@ -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") {

View File

@ -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

View File

@ -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)
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>
}
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
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()
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?
}
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
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)
}
}
}

View File

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

View File

@ -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")
}

View File

@ -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")
}