Skip to content

Commit 5ec1a83

Browse files
committed
FEATURE : (on-going) implement cascade delete #4
1 parent e3902cd commit 5ec1a83

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

src/main/kotlin/eom/improve/kafkaboot/service/FilmService.kt

+33-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,22 @@ package eom.improve.kafkaboot.service
22

33
import eom.improve.kafkaboot.model.FilmEntity
44
import eom.improve.kafkaboot.repository.FilmRepository
5+
import eom.improve.kafkaboot.repository.InventoryRepository
6+
import eom.improve.kafkaboot.repository.PaymentRepository
7+
import eom.improve.kafkaboot.repository.RentalRepository
58
import org.springframework.stereotype.Service
9+
import org.springframework.transaction.annotation.Transactional
610
import reactor.core.publisher.Flux
711
import reactor.core.publisher.Mono
12+
import reactor.kotlin.core.publisher.toMono
813

914

1015
@Service
1116
class FilmService(
12-
private val filmRepository : FilmRepository
17+
private val filmRepository : FilmRepository,
18+
private val paymentRepository : PaymentRepository,
19+
private val inventoryRepository : InventoryRepository,
20+
private val rentalRepository : RentalRepository
1321
) {
1422
fun findAll() : Flux<FilmEntity> = filmRepository.findAllBy()
1523

@@ -23,11 +31,32 @@ class FilmService(
2331
return filmRepository.save(toBeSavedFilm);
2432
}
2533

34+
@Transactional
2635
fun deleteFilm(filmId : Int) : Mono<Void> {
27-
// need to implement cascade delete for table data that set foreign key
36+
// need to implement cascade delete(maybe soft) for table data that set foreign key
2837
return filmRepository.findById(filmId)
2938
.switchIfEmpty(Mono.error(RuntimeException("Not registered film")))
30-
.flatMap { filmRepository.deleteById(filmId) }
31-
.then()
39+
.flatMap { filmEn ->
40+
inventoryRepository.findAllByFilmId(filmId)
41+
.switchIfEmpty { filmRepository.delete(filmEn).then() }
42+
.flatMap { inventoryEn ->
43+
rentalRepository.findAllByInventoryId(inventoryEn.inventoryId)
44+
.flatMap { rentalEn ->
45+
paymentRepository.findAllByRentalId(rentalEn.rentalId)
46+
.flatMap { paymentRepository.delete(it) }
47+
.then(rentalEn.toMono())
48+
}
49+
.flatMap {
50+
rentalRepository.delete(it)
51+
.then(inventoryEn.toMono())
52+
}
53+
}
54+
.flatMap {
55+
inventoryRepository.delete(it)
56+
.then(filmEn.toMono())
57+
}
58+
.flatMap { filmRepository.delete(it).then() }
59+
.then()
60+
}
3261
}
3362
}

0 commit comments

Comments
 (0)