feature: lab5 done
This commit is contained in:
parent
5c3621d7ec
commit
6a39009c3b
64
.idea/workspace.xml
generated
64
.idea/workspace.xml
generated
@ -9,15 +9,19 @@
|
||||
<option name="autoReloadType" value="NONE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="7c94e195-a540-483e-9a1c-11797aeb1741" name="Changes" comment="feature: lab5 almost done, save commit">
|
||||
<list default="true" id="7c94e195-a540-483e-9a1c-11797aeb1741" name="Changes" comment="feature: lab5 main things works">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/api/ServerService.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/api/ServerService.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/api/repository/RestOrderRepository.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/api/repository/RestOrderRepository.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/repository/OrderRepository.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/repository/OrderRepository.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/viewmodel/BasketViewModel.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/viewmodel/BasketViewModel.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/api/repository/RestServiceRepository.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/api/repository/RestServiceRepository.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/viewmodel/OrderViewModel.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/viewmodel/OrderViewModel.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/viewmodel/ServiceViewModel.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/businessLogic/viewmodel/ServiceViewModel.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/Basket/Basket.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/Basket/Basket.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/List_of_Services/ListOfServices.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/List_of_Services/ListOfServices.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/List_of_Services/Service.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/List_of_Services/Service.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/Orders/Orders.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/Orders/Orders.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/Profile/Login.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/composeui/Profile/Login.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/database/AppDatabase.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/database/AppDatabase.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/database/dao/ServiceDao.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/database/dao/ServiceDao.kt" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/database/repository/ServiceRepositoryImpl.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/myapplication/database/repository/ServiceRepositoryImpl.kt" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@ -64,34 +68,36 @@
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"ApkExportedModule": "My_Application.app",
|
||||
"ExportApk.ApkPathForMy_Application.app": "C:\\Users\\Danil\\Desktop\\MDP\\labs\\app",
|
||||
"PROJECT_TRUSTED_KEY": "true",
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.cidr.known.project.marker": "true",
|
||||
"ToolWindowLogcat.ShowToolbar": "false",
|
||||
"cidr.known.project.marker": "true",
|
||||
"last_opened_file_path": "C:/Users/Danil/Downloads/test",
|
||||
"project.structure.last.edited": "Modules",
|
||||
"project.structure.proportion": "0.17",
|
||||
"project.structure.side.proportion": "0.2",
|
||||
"settings.editor.selected.configurable": "emulator"
|
||||
<component name="PropertiesComponent">{
|
||||
"keyToString": {
|
||||
"ApkExportedModule": "My_Application.app",
|
||||
"ExportApk.ApkPathForMy_Application.app": "C:\\Users\\Danil\\Desktop\\MDP\\labs\\app",
|
||||
"PROJECT_TRUSTED_KEY": "true",
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"RunOnceActivity.cidr.known.project.marker": "true",
|
||||
"ToolWindowLogcat.ShowToolbar": "false",
|
||||
"cidr.known.project.marker": "true",
|
||||
"com.android.tools.idea.devicemanager.tab": "Physical",
|
||||
"last_opened_file_path": "C:/Users/Danil/Desktop/Новая папка",
|
||||
"project.structure.last.edited": "Modules",
|
||||
"project.structure.proportion": "0.17",
|
||||
"project.structure.side.proportion": "0.2",
|
||||
"settings.editor.selected.configurable": "emulator"
|
||||
},
|
||||
"keyToStringList": {
|
||||
"ExportApk.BuildVariants": [
|
||||
"release"
|
||||
"keyToStringList": {
|
||||
"ExportApk.BuildVariants": [
|
||||
"release"
|
||||
],
|
||||
"com.android.tools.idea.sqlite.queryhistory": [
|
||||
"insert into tbl_user values (1, \"Danil\", \"Markov\", \"danil@mail.ru\", \"123\", \"ADMIN\", null)",
|
||||
"delete from tbl_user where userId = 6",
|
||||
"delete from tbl_user where userId = 4",
|
||||
"delete from tbl_user where userId = 2"
|
||||
"com.android.tools.idea.sqlite.queryhistory": [
|
||||
"delete from tbl_service",
|
||||
"insert into tbl_user values (1, \"Danil\", \"Markov\", \"danil@mail.ru\", \"123\", \"ADMIN\", null)",
|
||||
"delete from tbl_user where userId = 6",
|
||||
"delete from tbl_user where userId = 4",
|
||||
"delete from tbl_user where userId = 2"
|
||||
]
|
||||
}
|
||||
}]]></component>
|
||||
}</component>
|
||||
<component name="PsdUISettings">
|
||||
<option name="MODULE_TAB" value="Signing Configs" />
|
||||
<option name="LAST_EDITED_SIGNING_CONFIG" value="debug" />
|
||||
|
@ -55,6 +55,9 @@ class RestServiceRepository(
|
||||
}
|
||||
|
||||
override suspend fun delete(service: Service) {
|
||||
service.serviceId?.let { this.service.deleteService(it) }
|
||||
try {
|
||||
service.serviceId?.let { this.service.deleteService(it) }
|
||||
dbServiceRepository.invalidateService(service.serviceId!!)
|
||||
}catch (ex: Exception){}
|
||||
}
|
||||
}
|
@ -11,6 +11,8 @@ import com.example.myapplication.businessLogic.repository.OrderRepository
|
||||
import com.example.myapplication.model.Order
|
||||
import com.example.myapplication.model.Service
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Date
|
||||
|
||||
@ -19,23 +21,32 @@ class OrderViewModel(private val orderRepository: OrderRepository, private val b
|
||||
val selectedItems get() = _selectedItems
|
||||
private val _total = mutableDoubleStateOf(0.00)
|
||||
val total: State<Double> get() = _total
|
||||
|
||||
fun createOrder() = viewModelScope.launch {
|
||||
val userId = GlobalUser.getInstance().getUser()?.userId!!
|
||||
val order = Order(
|
||||
date = Date().time,
|
||||
total = getTotal(userId),
|
||||
creatorUserId = userId
|
||||
)
|
||||
orderRepository.insert(order)
|
||||
private var _orders = MutableStateFlow<List<Order>>(emptyList())
|
||||
val orders: StateFlow<List<Order>> get() = _orders
|
||||
fun createOrder(): Boolean {
|
||||
viewModelScope.launch {
|
||||
val userId = GlobalUser.getInstance().getUser()?.userId!!
|
||||
val order = Order(
|
||||
date = Date().time,
|
||||
total = getTotal(userId),
|
||||
creatorUserId = userId
|
||||
)
|
||||
orderRepository.insert(order)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
suspend fun getOrderWithServices(id: Int) : Flow<List<Service>> {
|
||||
return orderRepository.getServiceFromOrder(id)
|
||||
}
|
||||
|
||||
suspend fun getUserOrders(id: Int): Flow<List<Order>> {
|
||||
return orderRepository.getUserOrders(id)
|
||||
suspend fun getUserOrders(id: Int) {
|
||||
viewModelScope.launch {
|
||||
orderRepository.getUserOrders(id)
|
||||
.collect{items ->
|
||||
_orders.value = items
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun updateSelectedItems(items: List<Service>) {
|
||||
|
@ -34,12 +34,7 @@ class ServiceViewModel(private val serviceRepository: ServiceRepository): ViewMo
|
||||
}
|
||||
|
||||
fun updateService() = viewModelScope.launch {
|
||||
val service = Service(
|
||||
name = name.value,
|
||||
price = price.doubleValue,
|
||||
photo = R.drawable.image_service
|
||||
)
|
||||
serviceRepository.update(service)
|
||||
serviceRepository.update(service.value)
|
||||
}
|
||||
|
||||
fun getServiceList(){
|
||||
|
@ -91,7 +91,7 @@ fun Basket(navController : NavHostController,
|
||||
Button(
|
||||
onClick = {
|
||||
orderViewModel.createOrder()
|
||||
navController.navigate(NavItem.Orders.route)
|
||||
navController.navigate(NavItem.ListOfServices.route)
|
||||
},
|
||||
modifier = Modifier
|
||||
.height(60.dp)
|
||||
|
@ -2,13 +2,19 @@ package com.example.myapplication.composeui.List_of_Services
|
||||
|
||||
import SearchBar
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.TextUnit
|
||||
import androidx.compose.ui.unit.TextUnitType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
@ -24,29 +30,41 @@ fun ListOfServices(navController: NavHostController, serviceViewModel: ServiceVi
|
||||
LaunchedEffect(serviceViewModel){
|
||||
serviceViewModel.getServiceList()
|
||||
}
|
||||
Column(
|
||||
val services = serviceViewModel.serviceList.collectAsLazyPagingItems()
|
||||
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(bottom = 30.dp),
|
||||
horizontalArrangement = Arrangement.Center
|
||||
){
|
||||
Text(
|
||||
text = "PetMed",
|
||||
style = MaterialTheme.typography.bodyMedium
|
||||
.copy(Color.White, fontSize = TextUnit(16.0f, TextUnitType.Em))
|
||||
)
|
||||
}
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(BlueMain)
|
||||
.padding(bottom = 60.dp)
|
||||
){
|
||||
SearchBar(
|
||||
modifier = Modifier)
|
||||
{
|
||||
searchText ->
|
||||
//TODO search logic
|
||||
item{
|
||||
SearchBar(
|
||||
modifier = Modifier)
|
||||
{
|
||||
searchText ->
|
||||
//TODO search logic
|
||||
}
|
||||
}
|
||||
val services = serviceViewModel.serviceList.collectAsLazyPagingItems()
|
||||
LazyColumn(modifier = Modifier.padding(15.dp, 0.dp)){
|
||||
items(
|
||||
count = services.itemCount,
|
||||
key = services.itemKey { service -> service.serviceId!! }
|
||||
){
|
||||
items(
|
||||
count = services.itemCount,
|
||||
key = services.itemKey { service -> service.serviceId!! }
|
||||
){
|
||||
index: Int ->
|
||||
val service: Service? = services[index]
|
||||
if (service != null){
|
||||
Service(navController, item = service)
|
||||
}
|
||||
val service: Service? = services[index]
|
||||
if (service != null){
|
||||
Service(navController, item = service)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ fun Service(navController: NavHostController, item: Service, basketViewModel: Ba
|
||||
}
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.padding(0.dp, 0.dp, 0.dp, 10.dp)
|
||||
.padding(10.dp, 0.dp, 10.dp, 10.dp)
|
||||
.height(150.dp)
|
||||
.shadow(
|
||||
elevation = 4.dp,
|
||||
|
@ -7,8 +7,8 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.itemsIndexed
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.mutableStateListOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
@ -17,21 +17,17 @@ import androidx.navigation.NavController
|
||||
import com.example.myapplication.GlobalUser
|
||||
import com.example.myapplication.businessLogic.viewmodel.AppViewModelProvider
|
||||
import com.example.myapplication.businessLogic.viewmodel.OrderViewModel
|
||||
import com.example.myapplication.model.Order
|
||||
import com.example.myapplication.ui.theme.BlueMain
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
@Composable
|
||||
fun Orders (navController: NavController, orderViewModel: OrderViewModel = viewModel(factory = AppViewModelProvider.Factory)){
|
||||
val ordersList = remember { mutableStateListOf<Order>() }
|
||||
val user = GlobalUser.getInstance().getUser()
|
||||
val ordersList by orderViewModel.orders.collectAsState()
|
||||
LaunchedEffect(Unit) {
|
||||
withContext(Dispatchers.IO) {
|
||||
orderViewModel.getUserOrders(user?.userId!!).collect { data ->
|
||||
ordersList.clear()
|
||||
ordersList.addAll(data)
|
||||
}
|
||||
orderViewModel.getUserOrders(user?.userId!!)
|
||||
}
|
||||
}
|
||||
LazyColumn(
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.example.myapplication.composeui.Profile
|
||||
|
||||
import android.view.Gravity
|
||||
import android.widget.Toast
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
@ -24,6 +26,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.TextUnit
|
||||
import androidx.compose.ui.unit.TextUnitType
|
||||
import androidx.compose.ui.unit.dp
|
||||
@ -43,6 +46,7 @@ import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
fun Login (navController: NavController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory), basketViewModel: BasketViewModel = viewModel(factory = AppViewModelProvider.Factory)){
|
||||
val context = LocalContext.current
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
@ -106,6 +110,9 @@ fun Login (navController: NavController, userViewModel: UserViewModel = viewMode
|
||||
userViewModel.authUser()
|
||||
navController.navigate(NavItem.Profile.route)
|
||||
}
|
||||
val toast = Toast.makeText(context, "message", Toast.LENGTH_SHORT)
|
||||
toast.setGravity(Gravity.TOP, 0, 100)
|
||||
toast.show()
|
||||
},
|
||||
modifier = Modifier
|
||||
.height(60.dp)
|
||||
|
@ -21,7 +21,7 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Database(entities = [User::class, Service::class, Order::class, OrderService::class, Basket::class, BasketService::class, RemoteKeys::class], version = 9)
|
||||
@Database(entities = [User::class, Service::class, Order::class, OrderService::class, Basket::class, BasketService::class, RemoteKeys::class], version = 10)
|
||||
abstract class AppDatabase : RoomDatabase(){
|
||||
abstract fun serviceDao(): ServiceDao
|
||||
abstract fun userDao(): UserDao
|
||||
|
@ -24,4 +24,6 @@ interface ServiceDao {
|
||||
suspend fun getServiceById(id: Int): Service
|
||||
@Query("DELETE FROM tbl_service")
|
||||
suspend fun deleteAll()
|
||||
@Query("DELETE FROM tbl_service WHERE serviceId = :id")
|
||||
suspend fun invalidateService(id: Int)
|
||||
}
|
@ -27,4 +27,5 @@ class ServiceRepositoryImpl(private val serviceDao: ServiceDao): ServiceReposito
|
||||
suspend fun insertServices(services: List<Service>) =
|
||||
serviceDao.insert(*services.toTypedArray())
|
||||
fun getAllServicesPagingSource(): PagingSource<Int, Service> = serviceDao.getAll()
|
||||
suspend fun invalidateService(id: Int) = serviceDao.invalidateService(id)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user