@@ -14,48 +14,93 @@ private val logger = KotlinLogging.logger {}
14
14
internal class VaktmesterPostgresRepo {
15
15
companion object {
16
16
val låsenøkkel = 121212
17
+ private val logger = KotlinLogging .logger {}
17
18
}
18
19
19
- fun slettOpplysninger (): List <UUID > {
20
- val antall = mutableListOf<UUID >()
20
+ fun slettOpplysninger (antall : Int = 10 ): List <UUID > {
21
+ val slettet = mutableListOf<UUID >()
21
22
using(sessionOf(dataSource)) { session ->
22
23
session.transaction { tx ->
23
24
tx.medLås(låsenøkkel) {
24
- hentAlleOpplysningerSomErFjernet(tx).forEach { opplysningId ->
25
- slettOpplysningVerdi(opplysningId).run (tx)
26
- slettOpplysningUtledet(opplysningId).run (tx)
27
- slettOpplysningLink(opplysningId).run (tx)
28
- slettOpplysningUtledning(opplysningId).run (tx)
29
- slettErstatteAv(opplysningId).run (tx)
30
- slettOpplysning(opplysningId).run (tx)
31
- antall.add(opplysningId)
25
+ hentAlleOpplysningerSomErFjernet(tx, antall).forEach { opplysninger ->
26
+ opplysninger.forEach { opplysningId ->
27
+ val liste = mutableListOf<BatchStatement >()
28
+ liste.add(slettOpplysningVerdi(opplysningId))
29
+ liste.add(slettOpplysningUtledet(opplysningId))
30
+ liste.add(slettOpplysningLink(opplysningId))
31
+ liste.add(slettOpplysningUtledning(opplysningId))
32
+ liste.add(slettErstatteAv(opplysningId))
33
+ liste.add(slettOpplysning(opplysningId))
34
+ liste.forEach { batch ->
35
+ batch.run (tx)
36
+ }
37
+ slettet.add(opplysningId)
38
+ }
32
39
}
33
40
}
34
41
}
35
42
}
36
- return antall
43
+ return slettet
37
44
}
38
45
39
- private fun hentAlleOpplysningerSomErFjernet (tx : TransactionalSession ): List <UUID > {
46
+ private fun hentAlleOpplysningerSomErFjernet (
47
+ tx : TransactionalSession ,
48
+ antall : Int ,
49
+ ): List <List <UUID >> {
50
+ val opplysningerIder = hentOpplysningerIder(tx, antall)
51
+
40
52
// language=PostgreSQL
41
53
val query =
42
54
"""
43
- SELECT *
55
+ SELECT id
44
56
FROM opplysning
45
- WHERE fjernet = true
46
- ORDER BY opprettet DESC;
57
+ INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id
58
+ WHERE fjernet = true AND op.opplysninger_id = :opplysninger_id
59
+ ORDER BY op.opplysninger_id, opprettet DESC;
47
60
""" .trimIndent()
61
+
48
62
val opplysninger =
63
+ opplysningerIder.map { id ->
64
+ tx.run (
65
+ queryOf(
66
+ query,
67
+ mapOf (" opplysninger_id" to id),
68
+ ).map { row ->
69
+ row.uuid(" id" )
70
+ }.asList,
71
+ )
72
+ }
73
+
74
+ logger.info { " Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" }
75
+ return opplysninger
76
+ }
77
+
78
+ private fun hentOpplysningerIder (
79
+ tx : TransactionalSession ,
80
+ antall : Int ,
81
+ ): List <UUID > {
82
+ // language=PostgreSQL
83
+ val test =
84
+ """
85
+ SELECT DISTINCT (op.opplysninger_id) AS opplysinger_id
86
+ FROM opplysning
87
+ INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id
88
+ WHERE fjernet = true
89
+ LIMIT :antall;
90
+ """ .trimIndent()
91
+
92
+ val opplysningerIder =
49
93
tx.run (
50
94
queryOf(
51
- query ,
52
- mapOf (" fjernet " to true ),
95
+ test ,
96
+ mapOf (" antall " to antall ),
53
97
).map { row ->
54
- row.uuid(" id " )
98
+ row.uuid(" opplysinger_id " )
55
99
}.asList,
56
100
)
57
- logger.info { " Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" }
58
- return opplysninger
101
+
102
+ logger.info { " Skal slette opplysninger tilhørende opplysinger_id: ${opplysningerIder.joinToString(" \n " ) { it.toString() }} " }
103
+ return opplysningerIder
59
104
}
60
105
61
106
private fun slettErstatteAv (opplysningId : UUID ) =
0 commit comments