@@ -2,14 +2,22 @@ package eom.improve.kafkaboot.service
2
2
3
3
import eom.improve.kafkaboot.model.FilmEntity
4
4
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
5
8
import org.springframework.stereotype.Service
9
+ import org.springframework.transaction.annotation.Transactional
6
10
import reactor.core.publisher.Flux
7
11
import reactor.core.publisher.Mono
12
+ import reactor.kotlin.core.publisher.toMono
8
13
9
14
10
15
@Service
11
16
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
13
21
) {
14
22
fun findAll () : Flux <FilmEntity > = filmRepository.findAllBy()
15
23
@@ -23,11 +31,32 @@ class FilmService(
23
31
return filmRepository.save(toBeSavedFilm);
24
32
}
25
33
34
+ @Transactional
26
35
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
28
37
return filmRepository.findById(filmId)
29
38
.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
+ }
32
61
}
33
62
}
0 commit comments