Fix: refactor project

This commit is contained in:
Emelyanov535 2023-12-07 17:31:23 +04:00
parent 6b41efd82e
commit 10b53b7f81
52 changed files with 157 additions and 186 deletions

View File

@ -2,10 +2,8 @@ package com.example.android_programming
import com.example.android_programming.api.repository.RestSneakerRepository import com.example.android_programming.api.repository.RestSneakerRepository
import com.example.android_programming.api.repository.RestUserRepository import com.example.android_programming.api.repository.RestUserRepository
import com.example.android_programming.repository.BasketRepository import com.example.android_programming.businessLogic.repo.BasketRepository
import com.example.android_programming.repository.OrderRepository import com.example.android_programming.businessLogic.repo.OrderRepository
import com.example.android_programming.repository.SneakerRepository
import com.example.android_programming.repository.UserRepository
interface AppContainer { interface AppContainer {
val sneakerRepo: RestSneakerRepository val sneakerRepo: RestSneakerRepository

View File

@ -5,15 +5,12 @@ import com.example.android_programming.api.BackendService
import com.example.android_programming.api.repository.RestSneakerRepository import com.example.android_programming.api.repository.RestSneakerRepository
import com.example.android_programming.api.repository.RestUserRepository import com.example.android_programming.api.repository.RestUserRepository
import com.example.android_programming.database.AppDatabase import com.example.android_programming.database.AppDatabase
import com.example.android_programming.database.remotekeys.repository.RemoteKeysRepositoryImpl import com.example.android_programming.database.repository.RemoteKeysRepositoryImpl
import com.example.android_programming.repository.BasketRepoImpl import com.example.android_programming.database.repository.BasketRepoImpl
import com.example.android_programming.repository.BasketRepository import com.example.android_programming.businessLogic.repo.BasketRepository
import com.example.android_programming.repository.OrderRepoImpl import com.example.android_programming.database.repository.OrderRepoImpl
import com.example.android_programming.repository.OrderRepository import com.example.android_programming.businessLogic.repo.OrderRepository
import com.example.android_programming.repository.SneakerRepoImpl import com.example.android_programming.database.repository.SneakerRepoImpl
import com.example.android_programming.repository.SneakerRepository
import com.example.android_programming.repository.UserRepoImpl
import com.example.android_programming.repository.UserRepository
class AppDataContainer(private val context: Context) : AppContainer { class AppDataContainer(private val context: Context) : AppContainer {
override val sneakerRepo: RestSneakerRepository by lazy { override val sneakerRepo: RestSneakerRepository by lazy {

View File

@ -2,6 +2,7 @@ package com.example.android_programming.api
import com.example.android_programming.api.model.SneakerRemote import com.example.android_programming.api.model.SneakerRemote
import com.example.android_programming.api.model.UserRemote import com.example.android_programming.api.model.UserRemote
import com.example.android_programming.api.model.UserRemoteSignIn
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import okhttp3.MediaType.Companion.toMediaType import okhttp3.MediaType.Companion.toMediaType
@ -34,6 +35,11 @@ interface BackendService {
@Body user: UserRemote, @Body user: UserRemote,
): UserRemote ): UserRemote
@POST("user/signin")
suspend fun SignIn(
@Body user: UserRemoteSignIn
): UserRemote
companion object { companion object {
private const val BASE_URL = "https://59k4pfj3-8080.euw.devtunnels.ms/api/" private const val BASE_URL = "https://59k4pfj3-8080.euw.devtunnels.ms/api/"

View File

@ -6,15 +6,12 @@ import androidx.paging.PagingState
import androidx.paging.RemoteMediator import androidx.paging.RemoteMediator
import androidx.room.withTransaction import androidx.room.withTransaction
import com.example.android_programming.api.model.toSneaker import com.example.android_programming.api.model.toSneaker
import com.example.android_programming.api.repository.RestSneakerRepository
import com.example.android_programming.database.AppDatabase import com.example.android_programming.database.AppDatabase
import com.example.android_programming.database.remotekeys.model.RemoteKeyType import com.example.android_programming.model.RemoteKeyType
import com.example.android_programming.database.remotekeys.model.RemoteKeys import com.example.android_programming.model.RemoteKeys
import com.example.android_programming.database.remotekeys.repository.RemoteKeyRepository import com.example.android_programming.database.repository.RemoteKeysRepositoryImpl
import com.example.android_programming.database.remotekeys.repository.RemoteKeysRepositoryImpl
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.repository.SneakerRepoImpl import com.example.android_programming.database.repository.SneakerRepoImpl
import com.example.android_programming.repository.SneakerRepository
import retrofit2.HttpException import retrofit2.HttpException
import java.io.IOException import java.io.IOException
@ -23,7 +20,7 @@ class SneakerRemoteMediator(
private val service: BackendService, private val service: BackendService,
private val sneakerRepository: SneakerRepoImpl, private val sneakerRepository: SneakerRepoImpl,
private val database: AppDatabase, private val database: AppDatabase,
private val dbRemoteKeyRepository:RemoteKeysRepositoryImpl private val dbRemoteKeyRepository: RemoteKeysRepositoryImpl
) : RemoteMediator<Int, Sneaker>() { ) : RemoteMediator<Int, Sneaker>() {
override suspend fun initialize(): InitializeAction { override suspend fun initialize(): InitializeAction {
return InitializeAction.LAUNCH_INITIAL_REFRESH return InitializeAction.LAUNCH_INITIAL_REFRESH

View File

@ -14,10 +14,11 @@ data class UserRemote (
val surname: String = "", val surname: String = "",
val email: String = "", val email: String = "",
val password: String = "", val password: String = "",
val role: RoleEnum = RoleEnum.User, val role: String = "",
val photo: Int? = 0, val photo: Int? = 0,
) )
fun UserRemote.toUser(): User = User( fun UserRemote.toUser(): User = User(
id, id,
name, name,

View File

@ -0,0 +1,9 @@
package com.example.android_programming.api.model
import kotlinx.serialization.Serializable
@Serializable
data class UserRemoteSignIn(
val email: String = "",
val password: String = "",
)

View File

@ -1,20 +1,18 @@
package com.example.android_programming.api.repository package com.example.android_programming.api.repository
import android.util.Log
import androidx.paging.ExperimentalPagingApi import androidx.paging.ExperimentalPagingApi
import androidx.paging.Pager import androidx.paging.Pager
import androidx.paging.PagingConfig import androidx.paging.PagingConfig
import androidx.paging.PagingData import androidx.paging.PagingData
import androidx.paging.PagingSource
import com.example.android_programming.AppContainer import com.example.android_programming.AppContainer
import com.example.android_programming.api.BackendService import com.example.android_programming.api.BackendService
import com.example.android_programming.api.SneakerRemoteMediator import com.example.android_programming.api.SneakerRemoteMediator
import com.example.android_programming.api.model.toSneaker import com.example.android_programming.api.model.toSneaker
import com.example.android_programming.database.AppDatabase import com.example.android_programming.database.AppDatabase
import com.example.android_programming.database.remotekeys.repository.RemoteKeysRepositoryImpl import com.example.android_programming.database.repository.RemoteKeysRepositoryImpl
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.repository.SneakerRepoImpl import com.example.android_programming.database.repository.SneakerRepoImpl
import com.example.android_programming.repository.SneakerRepository import com.example.android_programming.businessLogic.repo.SneakerRepository
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
class RestSneakerRepository( class RestSneakerRepository(

View File

@ -1,16 +1,17 @@
package com.example.android_programming.api.repository package com.example.android_programming.api.repository
import com.example.android_programming.api.BackendService import com.example.android_programming.api.BackendService
import com.example.android_programming.api.model.UserRemoteSignIn
import com.example.android_programming.api.model.toUser
import com.example.android_programming.api.model.toUserRemote import com.example.android_programming.api.model.toUserRemote
import com.example.android_programming.model.User import com.example.android_programming.model.User
import com.example.android_programming.repository.UserRepository import com.example.android_programming.businessLogic.repo.UserRepository
class RestUserRepository( class RestUserRepository(
private var service: BackendService private var service: BackendService
): UserRepository { ): UserRepository {
override suspend fun createUser(user: User) { override suspend fun createUser(user: User) {
val user1 = user.toUserRemote() service.SignUp(user.toUserRemote())
service.SignUp(user1)
} }
override suspend fun updateUser(user: User) { override suspend fun updateUser(user: User) {
@ -20,5 +21,7 @@ class RestUserRepository(
override suspend fun deleteUser(user: User) { override suspend fun deleteUser(user: User) {
println() println()
} }
override suspend fun authUser(user: UserRemoteSignIn): User {
return service.SignIn(user).toUser()
}
} }

View File

@ -1,4 +1,4 @@
package com.example.android_programming.repository package com.example.android_programming.businessLogic.repo
import androidx.room.Delete import androidx.room.Delete
import androidx.room.Insert import androidx.room.Insert

View File

@ -1,4 +1,4 @@
package com.example.android_programming.repository package com.example.android_programming.businessLogic.repo
import com.example.android_programming.model.Order import com.example.android_programming.model.Order
import com.example.android_programming.model.OrderSneaker import com.example.android_programming.model.OrderSneaker

View File

@ -0,0 +1,10 @@
package com.example.android_programming.businessLogic.repo
import com.example.android_programming.model.RemoteKeyType
import com.example.android_programming.model.RemoteKeys
interface RemoteKeyRepository {
suspend fun getAllRemoteKeys(id: Int, type: RemoteKeyType): RemoteKeys?
suspend fun createRemoteKeys(remoteKeys: List<RemoteKeys>)
suspend fun deleteRemoteKey(type: RemoteKeyType)
}

View File

@ -1,4 +1,4 @@
package com.example.android_programming.repository package com.example.android_programming.businessLogic.repo
import androidx.paging.PagingData import androidx.paging.PagingData
import androidx.paging.PagingSource import androidx.paging.PagingSource

View File

@ -1,5 +1,6 @@
package com.example.android_programming.repository package com.example.android_programming.businessLogic.repo
import com.example.android_programming.api.model.UserRemoteSignIn
import com.example.android_programming.model.Basket import com.example.android_programming.model.Basket
import com.example.android_programming.model.User import com.example.android_programming.model.User
import com.example.android_programming.model.UserWithOrder import com.example.android_programming.model.UserWithOrder
@ -9,6 +10,5 @@ interface UserRepository {
suspend fun createUser(user: User) suspend fun createUser(user: User)
suspend fun updateUser(user: User) suspend fun updateUser(user: User)
suspend fun deleteUser(user: User) suspend fun deleteUser(user: User)
// suspend fun getUserById(id: Int): User suspend fun authUser(user: UserRemoteSignIn): User
// suspend fun getUserByEmail(email: String): User
} }

View File

@ -1,4 +1,4 @@
package com.example.android_programming.vmodel package com.example.android_programming.businessLogic.vmodel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.CreationExtras import androidx.lifecycle.viewmodel.CreationExtras

View File

@ -1,15 +1,10 @@
package com.example.android_programming.vmodel package com.example.android_programming.businessLogic.vmodel
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.example.android_programming.model.Basket
import com.example.android_programming.model.BasketSneakers import com.example.android_programming.model.BasketSneakers
import com.example.android_programming.model.BasketWithSneakers import com.example.android_programming.model.BasketWithSneakers
import com.example.android_programming.model.Sneaker import com.example.android_programming.businessLogic.repo.BasketRepository
import com.example.android_programming.repository.BasketRepository
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow

View File

@ -1,26 +1,20 @@
package com.example.android_programming.vmodel package com.example.android_programming.businessLogic.vmodel
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.CreationExtras
import com.example.android_programming.App
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.database.AppDatabase
import com.example.android_programming.model.Order import com.example.android_programming.model.Order
import com.example.android_programming.model.OrderSneaker import com.example.android_programming.model.OrderSneaker
import com.example.android_programming.model.OrderWithSneakers import com.example.android_programming.model.OrderWithSneakers
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.model.UserWithOrder import com.example.android_programming.model.UserWithOrder
import com.example.android_programming.repository.BasketRepository import com.example.android_programming.businessLogic.repo.BasketRepository
import com.example.android_programming.repository.OrderRepository import com.example.android_programming.businessLogic.repo.OrderRepository
import com.example.android_programming.repository.SneakerRepository
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.util.Date import java.util.Date

View File

@ -1,30 +1,14 @@
package com.example.android_programming.vmodel package com.example.android_programming.businessLogic.vmodel
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.CreationExtras
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.cachedIn
import androidx.paging.map
import com.example.android_programming.App
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.api.model.toSneakerRemote
import com.example.android_programming.api.repository.RestSneakerRepository import com.example.android_programming.api.repository.RestSneakerRepository
import com.example.android_programming.database.AppDatabase
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.repository.SneakerRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class SneakerViewModel(private val sneakerRepository: RestSneakerRepository): ViewModel() { class SneakerViewModel(private val sneakerRepository: RestSneakerRepository): ViewModel() {

View File

@ -1,20 +1,13 @@
package com.example.android_programming.vmodel package com.example.android_programming.businessLogic.vmodel
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.CreationExtras
import com.example.android_programming.App
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.database.AppDatabase import com.example.android_programming.api.model.UserRemoteSignIn
import com.example.android_programming.model.Basket
import com.example.android_programming.model.RoleEnum
import com.example.android_programming.model.User import com.example.android_programming.model.User
import com.example.android_programming.repository.BasketRepository import com.example.android_programming.businessLogic.repo.UserRepository
import com.example.android_programming.repository.SneakerRepository
import com.example.android_programming.repository.UserRepository
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class UserViewModel(private val userRepository: UserRepository): ViewModel() { class UserViewModel(private val userRepository: UserRepository): ViewModel() {
@ -29,17 +22,14 @@ class UserViewModel(private val userRepository: UserRepository): ViewModel() {
surname = surname.value, surname = surname.value,
email = email.value, email = email.value,
password = password.value, password = password.value,
role = RoleEnum.User, role = "USER",
photo = R.drawable.shailushai photo = R.drawable.shailushai
) )
userRepository.createUser(user) userRepository.createUser(user)
} }
fun authUser() = viewModelScope.launch { fun authUser() = viewModelScope.launch {
// val user = userRepository.getUserByEmail(email.value) val user = userRepository.authUser(UserRemoteSignIn(email.value, password.value))
// if (password.value != "" && user.password == password.value) { GlobalUser.getInstance().setUser(user)
// val globalUser = GlobalUser.getInstance()
// globalUser.setUser(user)
// }
} }
fun isValidEmail(email: String): Boolean { fun isValidEmail(email: String): Boolean {

View File

@ -18,8 +18,8 @@ import com.example.android_programming.composeui.Screens.ProfileScreen.Profile.P
import com.example.android_programming.composeui.Screens.ProfileScreen.SignIn.LoginScreen import com.example.android_programming.composeui.Screens.ProfileScreen.SignIn.LoginScreen
import com.example.android_programming.composeui.Screens.ProfileScreen.SignUp.SignUpScreen import com.example.android_programming.composeui.Screens.ProfileScreen.SignUp.SignUpScreen
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
import com.google.gson.Gson import com.google.gson.Gson
@Composable @Composable

View File

@ -35,8 +35,8 @@ import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.PhotoManager import com.example.android_programming.model.PhotoManager
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.SneakerViewModel import com.example.android_programming.businessLogic.vmodel.SneakerViewModel
@Composable @Composable
fun AddPanel(sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)){ fun AddPanel(sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)){

View File

@ -23,7 +23,7 @@ import com.example.android_programming.model.RoleEnum
fun AdminPanel(navHostController: NavHostController) { fun AdminPanel(navHostController: NavHostController) {
var isAddPanelVisible by remember { mutableStateOf(false) } var isAddPanelVisible by remember { mutableStateOf(false) }
var isChangePanelVisible by remember { mutableStateOf(false) } var isChangePanelVisible by remember { mutableStateOf(false) }
var showDialog by remember { mutableStateOf(GlobalUser.getInstance().getUser()?.role == RoleEnum.User || GlobalUser.getInstance().getUser()?.role == null) } var showDialog by remember { mutableStateOf(GlobalUser.getInstance().getUser()?.role == "USER" || GlobalUser.getInstance().getUser()?.role == null) }
if (!showDialog) { if (!showDialog) {
Column( Column(
modifier = Modifier modifier = Modifier

View File

@ -30,8 +30,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.SneakerViewModel import com.example.android_programming.businessLogic.vmodel.SneakerViewModel
import com.google.gson.Gson import com.google.gson.Gson
@Composable @Composable

View File

@ -30,8 +30,8 @@ import androidx.paging.LoadState
import androidx.paging.compose.collectAsLazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey import androidx.paging.compose.itemKey
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.SneakerViewModel import com.example.android_programming.businessLogic.vmodel.SneakerViewModel
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@Composable @Composable

View File

@ -43,8 +43,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.PhotoManager import com.example.android_programming.model.PhotoManager
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.SneakerViewModel import com.example.android_programming.businessLogic.vmodel.SneakerViewModel
@Composable @Composable
fun ChangeSneaker(sneaker: Sneaker, onBackClick: () -> Unit, sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)) { fun ChangeSneaker(sneaker: Sneaker, onBackClick: () -> Unit, sneakerViewModel: SneakerViewModel = viewModel(factory = AppViewModelProvider.Factory)) {

View File

@ -23,8 +23,8 @@ import com.example.android_programming.composeui.Screens.HomeScreen.FilterByBran
import com.example.android_programming.composeui.Screens.HomeScreen.SearchField.SearchField import com.example.android_programming.composeui.Screens.HomeScreen.SearchField.SearchField
import com.example.android_programming.composeui.Screens.HomeScreen.SneakerRecyclerView.RecyclerView import com.example.android_programming.composeui.Screens.HomeScreen.SneakerRecyclerView.RecyclerView
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
@Composable @Composable
fun HomeScreen(navHostController: NavHostController) { fun HomeScreen(navHostController: NavHostController) {

View File

@ -33,9 +33,9 @@ import com.example.android_programming.GlobalUser
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.BasketSneakers import com.example.android_programming.model.BasketSneakers
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.BasketViewModel import com.example.android_programming.businessLogic.vmodel.BasketViewModel
import com.example.android_programming.vmodel.SneakerViewModel import com.example.android_programming.businessLogic.vmodel.SneakerViewModel
import com.google.gson.Gson import com.google.gson.Gson
@Composable @Composable

View File

@ -20,9 +20,9 @@ import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey import androidx.paging.compose.itemKey
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
import com.example.android_programming.vmodel.SneakerViewModel import com.example.android_programming.businessLogic.vmodel.SneakerViewModel
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View File

@ -18,8 +18,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.model.Order import com.example.android_programming.model.Order
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View File

@ -34,8 +34,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.Order import com.example.android_programming.model.Order
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
import java.util.Date import java.util.Date
@Composable @Composable

View File

@ -37,9 +37,9 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.BasketViewModel import com.example.android_programming.businessLogic.vmodel.BasketViewModel
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
@SuppressLint("UnrememberedMutableState") @SuppressLint("UnrememberedMutableState")
@Composable @Composable

View File

@ -27,7 +27,7 @@ import androidx.compose.ui.text.input.KeyboardType
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 com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
@Composable @Composable
fun DeliveryAddress(orderViewModel: OrderViewModel) { fun DeliveryAddress(orderViewModel: OrderViewModel) {

View File

@ -23,9 +23,9 @@ import androidx.navigation.NavHostController
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.BasketViewModel import com.example.android_programming.businessLogic.vmodel.BasketViewModel
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
@Composable @Composable

View File

@ -4,7 +4,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
@Composable @Composable
fun ShoppingList(list : List<Sneaker>) { fun ShoppingList(list : List<Sneaker>) {

View File

@ -17,7 +17,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.vmodel.OrderViewModel import com.example.android_programming.businessLogic.vmodel.OrderViewModel
@Composable @Composable
fun SubTotal(orderViewModel: OrderViewModel) { fun SubTotal(orderViewModel: OrderViewModel) {

View File

@ -8,8 +8,8 @@ import androidx.navigation.compose.rememberNavController
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.composeui.Screens.ProfileScreen.SignIn.LoginScreen import com.example.android_programming.composeui.Screens.ProfileScreen.SignIn.LoginScreen
import com.example.android_programming.model.Basket import com.example.android_programming.model.Basket
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.BasketViewModel import com.example.android_programming.businessLogic.vmodel.BasketViewModel
@Composable @Composable
fun ProfileScreen(navController: NavHostController) { fun ProfileScreen(navController: NavHostController) {

View File

@ -40,9 +40,9 @@ import androidx.navigation.NavHostController
import com.example.android_programming.GlobalUser import com.example.android_programming.GlobalUser
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.model.Basket import com.example.android_programming.model.Basket
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.BasketViewModel import com.example.android_programming.businessLogic.vmodel.BasketViewModel
import com.example.android_programming.vmodel.UserViewModel import com.example.android_programming.businessLogic.vmodel.UserViewModel
@Composable @Composable
fun SignInCard(navController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory), basketViewModel: BasketViewModel = viewModel(factory = AppViewModelProvider.Factory)) { fun SignInCard(navController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory), basketViewModel: BasketViewModel = viewModel(factory = AppViewModelProvider.Factory)) {

View File

@ -32,8 +32,8 @@ import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.vmodel.AppViewModelProvider import com.example.android_programming.businessLogic.vmodel.AppViewModelProvider
import com.example.android_programming.vmodel.UserViewModel import com.example.android_programming.businessLogic.vmodel.UserViewModel
@Composable @Composable
fun SignUpCard(navHostController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory)) { fun SignUpCard(navHostController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory)) {

View File

@ -6,17 +6,16 @@ import androidx.room.Room
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.SupportSQLiteDatabase
import com.example.android_programming.R import com.example.android_programming.R
import com.example.android_programming.dao.BasketDao import com.example.android_programming.database.dao.BasketDao
import com.example.android_programming.dao.OrderDao import com.example.android_programming.database.dao.OrderDao
import com.example.android_programming.dao.SneakerDao import com.example.android_programming.database.dao.SneakerDao
import com.example.android_programming.dao.UserDao import com.example.android_programming.database.dao.UserDao
import com.example.android_programming.database.remotekeys.dao.RemoteKeysDao import com.example.android_programming.database.dao.RemoteKeysDao
import com.example.android_programming.database.remotekeys.model.RemoteKeys import com.example.android_programming.model.RemoteKeys
import com.example.android_programming.model.Basket import com.example.android_programming.model.Basket
import com.example.android_programming.model.BasketSneakers import com.example.android_programming.model.BasketSneakers
import com.example.android_programming.model.Order import com.example.android_programming.model.Order
import com.example.android_programming.model.OrderSneaker import com.example.android_programming.model.OrderSneaker
import com.example.android_programming.model.RoleEnum
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import com.example.android_programming.model.User import com.example.android_programming.model.User
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -41,9 +40,9 @@ abstract class AppDatabase : RoomDatabase() {
INSTANCE?.let { database -> INSTANCE?.let { database ->
// User // User
val userDao = database.userDao() val userDao = database.userDao()
val user1 = User(null, "Artem", "Emelyanov", "artem@mail.ru", "123", RoleEnum.Admin) val user1 = User(null, "Artem", "Emelyanov", "artem@mail.ru", "123", "ADMIN")
val user2 = User(null, "Danil", "Markov", "danil@mail.ru", "123", RoleEnum.User) val user2 = User(null, "Danil", "Markov", "danil@mail.ru", "123", "USER")
val user3 = User(null, "Viktoria", "Presnyakova", "vika@mail.ru", "123", RoleEnum.User) val user3 = User(null, "Viktoria", "Presnyakova", "vika@mail.ru", "123", "USER")
userDao.createUser(user1) userDao.createUser(user1)
userDao.createUser(user2) userDao.createUser(user2)
userDao.createUser(user3) userDao.createUser(user3)

View File

@ -1,4 +1,4 @@
package com.example.android_programming.dao package com.example.android_programming.database.dao
import androidx.room.Dao import androidx.room.Dao
import androidx.room.Delete import androidx.room.Delete

View File

@ -1,4 +1,4 @@
package com.example.android_programming.dao package com.example.android_programming.database.dao
import androidx.room.Dao import androidx.room.Dao
import androidx.room.Delete import androidx.room.Delete

View File

@ -1,11 +1,11 @@
package com.example.android_programming.database.remotekeys.dao package com.example.android_programming.database.dao
import androidx.room.Dao import androidx.room.Dao
import androidx.room.Insert import androidx.room.Insert
import androidx.room.OnConflictStrategy import androidx.room.OnConflictStrategy
import androidx.room.Query import androidx.room.Query
import com.example.android_programming.database.remotekeys.model.RemoteKeyType import com.example.android_programming.model.RemoteKeyType
import com.example.android_programming.database.remotekeys.model.RemoteKeys import com.example.android_programming.model.RemoteKeys
@Dao @Dao
interface RemoteKeysDao { interface RemoteKeysDao {

View File

@ -1,4 +1,4 @@
package com.example.android_programming.dao package com.example.android_programming.database.dao
import androidx.paging.PagingSource import androidx.paging.PagingSource
import androidx.room.Dao import androidx.room.Dao

View File

@ -1,4 +1,4 @@
package com.example.android_programming.dao package com.example.android_programming.database.dao
import androidx.room.Dao import androidx.room.Dao
import androidx.room.Delete import androidx.room.Delete

View File

@ -1,10 +0,0 @@
package com.example.android_programming.database.remotekeys.repository
import com.example.android_programming.database.remotekeys.model.RemoteKeyType
import com.example.android_programming.database.remotekeys.model.RemoteKeys
interface RemoteKeyRepository {
suspend fun getAllRemoteKeys(id: Int, type: RemoteKeyType): RemoteKeys?
suspend fun createRemoteKeys(remoteKeys: List<RemoteKeys>)
suspend fun deleteRemoteKey(type: RemoteKeyType)
}

View File

@ -1,6 +1,7 @@
package com.example.android_programming.repository package com.example.android_programming.database.repository
import com.example.android_programming.dao.BasketDao import com.example.android_programming.businessLogic.repo.BasketRepository
import com.example.android_programming.database.dao.BasketDao
import com.example.android_programming.model.Basket import com.example.android_programming.model.Basket
import com.example.android_programming.model.BasketSneakers import com.example.android_programming.model.BasketSneakers
import com.example.android_programming.model.BasketWithSneakers import com.example.android_programming.model.BasketWithSneakers

View File

@ -1,6 +1,7 @@
package com.example.android_programming.repository package com.example.android_programming.database.repository
import com.example.android_programming.dao.OrderDao import com.example.android_programming.businessLogic.repo.OrderRepository
import com.example.android_programming.database.dao.OrderDao
import com.example.android_programming.model.Order import com.example.android_programming.model.Order
import com.example.android_programming.model.OrderSneaker import com.example.android_programming.model.OrderSneaker
import com.example.android_programming.model.OrderWithSneakers import com.example.android_programming.model.OrderWithSneakers

View File

@ -1,8 +1,9 @@
package com.example.android_programming.database.remotekeys.repository package com.example.android_programming.database.repository
import com.example.android_programming.database.remotekeys.dao.RemoteKeysDao import com.example.android_programming.businessLogic.repo.RemoteKeyRepository
import com.example.android_programming.database.remotekeys.model.RemoteKeyType import com.example.android_programming.database.dao.RemoteKeysDao
import com.example.android_programming.database.remotekeys.model.RemoteKeys import com.example.android_programming.model.RemoteKeyType
import com.example.android_programming.model.RemoteKeys
class RemoteKeysRepositoryImpl(private val remoteKeysDao: RemoteKeysDao) : RemoteKeyRepository { class RemoteKeysRepositoryImpl(private val remoteKeysDao: RemoteKeysDao) : RemoteKeyRepository {
override suspend fun getAllRemoteKeys(id: Int, type: RemoteKeyType) = override suspend fun getAllRemoteKeys(id: Int, type: RemoteKeyType) =

View File

@ -1,12 +1,12 @@
package com.example.android_programming.repository package com.example.android_programming.database.repository
import androidx.paging.Pager import androidx.paging.Pager
import androidx.paging.PagingConfig import androidx.paging.PagingConfig
import androidx.paging.PagingData import androidx.paging.PagingData
import androidx.paging.PagingSource import androidx.paging.PagingSource
import androidx.paging.cachedIn
import com.example.android_programming.AppContainer import com.example.android_programming.AppContainer
import com.example.android_programming.dao.SneakerDao import com.example.android_programming.businessLogic.repo.SneakerRepository
import com.example.android_programming.database.dao.SneakerDao
import com.example.android_programming.model.Sneaker import com.example.android_programming.model.Sneaker
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow

View File

@ -0,0 +1,17 @@
package com.example.android_programming.database.repository
//class UserRepoImpl(private val userDao: UserDao) : UserRepository {
//
// override suspend fun createUser(user: User) = userDao.createUser(user)
//
// override suspend fun updateUser(user: User) = userDao.updateUser(user)
//
// override suspend fun deleteUser(user: User) = userDao.deleteUser(user)
//// override suspend fun authUser(user: UserRemoteSignIn): User {
//// println()
//// }
//
//// override suspend fun getUserById(id: Int): User = userDao.getUserById(id)
////
//// override suspend fun getUserByEmail(email: String): User = userDao.getUserByEmail(email)
//}

View File

@ -1,10 +1,9 @@
package com.example.android_programming.database.remotekeys.model package com.example.android_programming.model
import androidx.room.Entity import androidx.room.Entity
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
import androidx.room.TypeConverter import androidx.room.TypeConverter
import androidx.room.TypeConverters import androidx.room.TypeConverters
import com.example.android_programming.model.Sneaker
enum class RemoteKeyType(private val type: String) { enum class RemoteKeyType(private val type: String) {
SNEAKER(Sneaker::class.simpleName ?: "Sneaker"); SNEAKER(Sneaker::class.simpleName ?: "Sneaker");

View File

@ -17,7 +17,7 @@ data class User(
@ColumnInfo(name = "Password") @ColumnInfo(name = "Password")
val password: String, val password: String,
@ColumnInfo(name = "Role") @ColumnInfo(name = "Role")
val role: RoleEnum, val role: String,
@ColumnInfo(name = "Photo") @ColumnInfo(name = "Photo")
val photo: Int? = null, val photo: Int? = null,
) )

View File

@ -1,19 +0,0 @@
package com.example.android_programming.repository
import com.example.android_programming.dao.UserDao
import com.example.android_programming.model.User
import com.example.android_programming.model.UserWithOrder
import kotlinx.coroutines.flow.Flow
class UserRepoImpl(private val userDao: UserDao) : UserRepository {
override suspend fun createUser(user: User) = userDao.createUser(user)
override suspend fun updateUser(user: User) = userDao.updateUser(user)
override suspend fun deleteUser(user: User) = userDao.deleteUser(user)
// override suspend fun getUserById(id: Int): User = userDao.getUserById(id)
//
// override suspend fun getUserByEmail(email: String): User = userDao.getUserByEmail(email)
}