Skip to content

Commit 0342013

Browse files
committed
Changed delete behavior, so that deleting a car also removes all maintenance jobs associated to the car
1 parent 3631666 commit 0342013

File tree

6 files changed

+37
-6
lines changed

6 files changed

+37
-6
lines changed

app/src/main/java/com/example/autocaretracker/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import com.example.autocaretracker.data.AutoCareTrackerDatabase
2727
class MainActivity : ComponentActivity() {
2828
private val carDao by lazy { AutoCareTrackerDatabase.getDatabase(this).carDao() }
2929
private val maintenanceDao by lazy { AutoCareTrackerDatabase.getDatabase(this).maintenanceDao() }
30-
private val carRepository by lazy { CarRepository(carDao) }
30+
private val carRepository by lazy { CarRepository(carDao, maintenanceDao) }
3131
private val maintenanceRepository by lazy { MaintenanceRepository(maintenanceDao) }
3232

3333
private val requestPermissionLauncher = registerForActivityResult(

app/src/main/java/com/example/autocaretracker/data/CarRepository.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.example.autocaretracker.data
22

33
import kotlinx.coroutines.flow.Flow
44

5-
class CarRepository(private val carDao: CarDao) {
5+
class CarRepository(private val carDao: CarDao, private val maintenanceDao: MaintenanceDao) {
66
val allCars: Flow<List<Car>> = carDao.getAllCars()
77

88
fun getCarById(carId: Int): Flow<Car?> {
@@ -20,4 +20,9 @@ class CarRepository(private val carDao: CarDao) {
2020
suspend fun delete(carId: Int) {
2121
carDao.delete(carId)
2222
}
23+
24+
suspend fun deleteCarAndMaintenance(carId: Int) {
25+
carDao.delete(carId)
26+
maintenanceDao.deleteMaintenanceForCar(carId)
27+
}
2328
}

app/src/main/java/com/example/autocaretracker/data/MaintenanceDao.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@ interface MaintenanceDao {
1515

1616
@Query("DELETE FROM maintenance WHERE maintenance_id = :maintenanceId")
1717
suspend fun delete(maintenanceId: Int)
18+
19+
@Query("DELETE FROM maintenance WHERE car_id = :carId")
20+
suspend fun deleteMaintenanceForCar(carId: Int)
1821
}

app/src/main/java/com/example/autocaretracker/ui/ViewCarDetailScreen.kt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import androidx.compose.ui.unit.dp
1818
import androidx.lifecycle.viewmodel.compose.viewModel
1919
import androidx.navigation.NavController
2020
import coil.compose.rememberAsyncImagePainter
21-
import coil.compose.rememberImagePainter
2221
import com.example.autocaretracker.R
2322
import com.example.autocaretracker.data.CarRepository
2423
import com.example.autocaretracker.data.Car
@@ -43,6 +42,7 @@ fun ViewCarDetailScreen(
4342

4443
val car = carState.value
4544
var showDialog by remember { mutableStateOf(false) }
45+
var showDeleteCarDialog by remember { mutableStateOf(false) }
4646
var maintenanceToDelete by remember { mutableStateOf<Maintenance?>(null) }
4747

4848
ConfirmDialog(
@@ -56,6 +56,25 @@ fun ViewCarDetailScreen(
5656
text = "Are you sure you want to delete this maintenance item?"
5757
)
5858

59+
ConfirmDialog(
60+
showDialog = showDeleteCarDialog,
61+
onDismiss = { showDeleteCarDialog = false },
62+
onConfirm = {
63+
car?.let { carViewModel.deleteCarAndMaintenance(it.car_id) }
64+
showDeleteCarDialog = false
65+
navController.navigate("view_cars") {
66+
popUpTo("view_car_detail/$carId") { inclusive = true }
67+
launchSingleTop = true
68+
anim {
69+
enter = 0
70+
exit = 0
71+
}
72+
}
73+
},
74+
title = "Confirm Delete",
75+
text = "Are you sure you want to delete this car and all its maintenance items?"
76+
)
77+
5978
car?.let { carDetail: Car ->
6079
val latestMaintenance = maintenanceItems.value.maxByOrNull { it.date }
6180
val lastUpdatedDate = latestMaintenance?.let { SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).format(Date(it.date)) }
@@ -112,7 +131,7 @@ fun ViewCarDetailScreen(
112131
)
113132
}
114133
IconButton(
115-
onClick = { showDialog = true },
134+
onClick = { showDeleteCarDialog = true },
116135
modifier = Modifier.size(56.dp)
117136
) {
118137
Icon(

app/src/main/java/com/example/autocaretracker/ui/ViewCarsScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ fun ViewCarsScreen(navController: NavController, carRepository: CarRepository) {
5353
showDialog = showDialog,
5454
onDismiss = { showDialog = false },
5555
onConfirm = {
56-
carToDelete?.let { carViewModel.delete(it) }
56+
carToDelete?.let { carViewModel.deleteCarAndMaintenance(it) }
5757
showDialog = false
5858
},
5959
title = "Confirm Delete",
60-
text = "Are you sure you want to delete this car?"
60+
text = "Are you sure you want to delete this car and all its maintenance items?"
6161
)
6262

6363
Box(modifier = Modifier.fillMaxSize()) {

app/src/main/java/com/example/autocaretracker/ui/ViewModels.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class CarViewModel(private val repository: CarRepository) : ViewModel() {
2828
fun delete(carId: Int) = viewModelScope.launch {
2929
repository.delete(carId)
3030
}
31+
32+
fun deleteCarAndMaintenance(carId: Int) = viewModelScope.launch {
33+
repository.deleteCarAndMaintenance(carId)
34+
}
3135
}
3236

3337
class CarViewModelFactory(private val repository: CarRepository) : ViewModelProvider.Factory {

0 commit comments

Comments
 (0)