Skip to content

Commit 35bc2fe

Browse files
committed
Trukket status for eksternt varsel ut i egen tabell, deaktivert sletting
1 parent f0f72a5 commit 35bc2fe

File tree

14 files changed

+323
-45
lines changed

14 files changed

+323
-45
lines changed

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/context/ApplicationContext.kt

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import no.nav.paw.arbeidssoekerregisteret.config.ServerConfig
1313
import no.nav.paw.arbeidssoekerregisteret.model.VarselMeldingBygger
1414
import no.nav.paw.arbeidssoekerregisteret.repository.BestillingRepository
1515
import no.nav.paw.arbeidssoekerregisteret.repository.BestiltVarselRepository
16+
import no.nav.paw.arbeidssoekerregisteret.repository.EksterntVarselRepository
1617
import no.nav.paw.arbeidssoekerregisteret.repository.PeriodeRepository
1718
import no.nav.paw.arbeidssoekerregisteret.repository.VarselRepository
1819
import no.nav.paw.arbeidssoekerregisteret.service.BestillingService
@@ -83,6 +84,7 @@ data class ApplicationContext(
8384
val dataSource = createHikariDataSource(databaseConfig)
8485
val periodeRepository = PeriodeRepository()
8586
val varselRepository = VarselRepository()
87+
val eksterntVarselRepository = EksterntVarselRepository()
8688
val bestillingRepository = BestillingRepository()
8789
val bestiltVarselRepository = BestiltVarselRepository()
8890

@@ -100,6 +102,7 @@ data class ApplicationContext(
100102
meterRegistry = prometheusMeterRegistry,
101103
periodeRepository = periodeRepository,
102104
varselRepository = varselRepository,
105+
eksterntVarselRepository = eksterntVarselRepository,
103106
varselMeldingBygger = varselMeldingBygger
104107
)
105108
val bestillingService = BestillingService(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package no.nav.paw.arbeidssoekerregisteret.model
2+
3+
import org.jetbrains.exposed.sql.Table
4+
import org.jetbrains.exposed.sql.javatime.timestamp
5+
6+
object EksterneVarslerTable : Table("eksterne_varsler") {
7+
val varselId = uuid("varsel_id").references(VarslerTable.varselId)
8+
val varselType = enumerationByName<VarselType>("varsel_type", 50)
9+
val varselStatus = enumerationByName<VarselStatus>("varsel_status", 50)
10+
val hendelseNavn = enumerationByName<VarselEventName>("hendelse_navn", 50)
11+
val hendelseTimestamp = timestamp("hendelse_timestamp")
12+
val insertedTimestamp = timestamp("inserted_timestamp")
13+
val updatedTimestamp = timestamp("updated_timestamp").nullable()
14+
override val primaryKey: PrimaryKey = PrimaryKey(varselId)
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package no.nav.paw.arbeidssoekerregisteret.model
2+
3+
import org.jetbrains.exposed.sql.ResultRow
4+
import java.time.Instant
5+
import java.util.*
6+
7+
data class EksterntVarselRow(
8+
val varselId: UUID,
9+
val varselType: VarselType,
10+
val varselStatus: VarselStatus,
11+
val hendelseName: VarselEventName,
12+
val hendelseTimestamp: Instant,
13+
val insertedTimestamp: Instant,
14+
val updatedTimestamp: Instant? = null
15+
)
16+
17+
data class InsertEksterntVarselRow(
18+
val varselId: UUID,
19+
val varselType: VarselType,
20+
val varselStatus: VarselStatus,
21+
val hendelseName: VarselEventName,
22+
val hendelseTimestamp: Instant
23+
)
24+
25+
data class UpdateEksterntVarselRow(
26+
val varselId: UUID,
27+
val varselType: VarselType,
28+
val varselStatus: VarselStatus,
29+
val hendelseName: VarselEventName,
30+
val hendelseTimestamp: Instant
31+
)
32+
33+
fun ResultRow.asEksterntVarselRow(): EksterntVarselRow = EksterntVarselRow(
34+
varselId = this[EksterneVarslerTable.varselId],
35+
varselType = this[EksterneVarslerTable.varselType],
36+
varselStatus = this[EksterneVarslerTable.varselStatus],
37+
hendelseName = this[EksterneVarslerTable.hendelseNavn],
38+
hendelseTimestamp = this[EksterneVarslerTable.hendelseTimestamp],
39+
insertedTimestamp = this[EksterneVarslerTable.insertedTimestamp],
40+
updatedTimestamp = this[EksterneVarslerTable.updatedTimestamp]
41+
)
42+
43+
fun ResultRow.asEksterntVarselRowOrNull(): EksterntVarselRow? {
44+
return if (this.getOrNull(EksterneVarslerTable.varselId) == null) {
45+
null
46+
} else {
47+
EksterntVarselRow(
48+
varselId = this[EksterneVarslerTable.varselId],
49+
varselType = this[EksterneVarslerTable.varselType],
50+
varselStatus = this[EksterneVarslerTable.varselStatus],
51+
hendelseName = this[EksterneVarslerTable.hendelseNavn],
52+
hendelseTimestamp = this[EksterneVarslerTable.hendelseTimestamp],
53+
insertedTimestamp = this[EksterneVarslerTable.insertedTimestamp],
54+
updatedTimestamp = this[EksterneVarslerTable.updatedTimestamp]
55+
)
56+
}
57+
}
58+
59+
60+
fun VarselHendelse.asInsertEksterntVarselRow() = InsertEksterntVarselRow(
61+
varselId = UUID.fromString(this.varselId),
62+
varselType = this.varseltype,
63+
varselStatus = this.status ?: VarselStatus.UKJENT,
64+
hendelseName = this.eventName,
65+
hendelseTimestamp = this.tidspunkt
66+
)
67+
68+
fun VarselHendelse.asUpdateEksterntVarselRow() = UpdateEksterntVarselRow(
69+
varselId = UUID.fromString(this.varselId),
70+
varselType = this.varseltype,
71+
varselStatus = this.status ?: VarselStatus.UKJENT,
72+
hendelseName = this.eventName,
73+
hendelseTimestamp = this.tidspunkt
74+
)

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/model/ResponseConverter.kt

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package no.nav.paw.arbeidssoekerregisteret.model
22

33
import no.nav.paw.arbeidssoekerregisteret.api.models.BestillingResponse
4+
import no.nav.paw.arbeidssoekerregisteret.api.models.EksterntVarselResponse
45
import no.nav.paw.arbeidssoekerregisteret.api.models.HendelseName
56
import no.nav.paw.arbeidssoekerregisteret.api.models.VarselResponse
67

@@ -9,6 +10,15 @@ fun VarselRow.asResponse() = VarselResponse(
910
periodeId = this.periodeId,
1011
varselKilde = this.varselKilde.asResponse(),
1112
varselType = this.varselType.asResponse(),
13+
varselStatus = this.varselStatus.asResponse(),
14+
hendelseName = this.hendelseName.asResponse(),
15+
hendelseTimestamp = this.hendelseTimestamp,
16+
insertedTimestamp = this.insertedTimestamp,
17+
updatedTimestamp = this.updatedTimestamp,
18+
eksterntVarsel = this.eksterntVarsel?.asResponse()
19+
)
20+
21+
fun EksterntVarselRow.asResponse() = EksterntVarselResponse(
1222
varselStatus = this.varselStatus.asResponse(),
1323
hendelseName = this.hendelseName.asResponse(),
1424
hendelseTimestamp = this.hendelseTimestamp,

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/model/VarselRow.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ data class VarselRow(
1515
val hendelseName: VarselEventName,
1616
val hendelseTimestamp: Instant,
1717
val insertedTimestamp: Instant,
18-
val updatedTimestamp: Instant? = null
18+
val updatedTimestamp: Instant? = null,
19+
val eksterntVarsel: EksterntVarselRow? = null
1920
)
2021

2122
data class InsertVarselRow(
@@ -44,7 +45,8 @@ fun ResultRow.asVarselRow(): VarselRow = VarselRow(
4445
hendelseName = this[VarslerTable.hendelseNavn],
4546
hendelseTimestamp = this[VarslerTable.hendelseTimestamp],
4647
insertedTimestamp = this[VarslerTable.insertedTimestamp],
47-
updatedTimestamp = this[VarslerTable.updatedTimestamp]
48+
updatedTimestamp = this[VarslerTable.updatedTimestamp],
49+
eksterntVarsel = this.asEksterntVarselRowOrNull()
4850
)
4951

5052
fun Periode.asInsertVarselRow() = InsertVarselRow(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package no.nav.paw.arbeidssoekerregisteret.repository
2+
3+
import no.nav.paw.arbeidssoekerregisteret.model.EksterneVarslerTable
4+
import no.nav.paw.arbeidssoekerregisteret.model.EksterntVarselRow
5+
import no.nav.paw.arbeidssoekerregisteret.model.InsertEksterntVarselRow
6+
import no.nav.paw.arbeidssoekerregisteret.model.Paging
7+
import no.nav.paw.arbeidssoekerregisteret.model.UpdateEksterntVarselRow
8+
import no.nav.paw.arbeidssoekerregisteret.model.asEksterntVarselRow
9+
import no.nav.paw.arbeidssoekerregisteret.model.asSortOrder
10+
import org.jetbrains.exposed.sql.insert
11+
import org.jetbrains.exposed.sql.selectAll
12+
import org.jetbrains.exposed.sql.transactions.transaction
13+
import org.jetbrains.exposed.sql.update
14+
import java.time.Instant
15+
import java.util.*
16+
17+
class EksterntVarselRepository {
18+
19+
fun findAll(paging: Paging = Paging.none()): List<EksterntVarselRow> = transaction {
20+
EksterneVarslerTable.selectAll()
21+
.orderBy(EksterneVarslerTable.hendelseTimestamp, paging.order.asSortOrder())
22+
.offset(paging.offset).limit(paging.size)
23+
.map { it.asEksterntVarselRow() }
24+
}
25+
26+
fun findByVarselId(varselId: UUID): EksterntVarselRow? = transaction {
27+
EksterneVarslerTable.selectAll()
28+
.where { EksterneVarslerTable.varselId eq varselId }
29+
.map { it.asEksterntVarselRow() }
30+
.firstOrNull()
31+
}
32+
33+
fun insert(varsel: InsertEksterntVarselRow): Int = transaction {
34+
EksterneVarslerTable.insert {
35+
it[varselId] = varsel.varselId
36+
it[varselType] = varsel.varselType
37+
it[varselStatus] = varsel.varselStatus
38+
it[hendelseNavn] = varsel.hendelseName
39+
it[hendelseTimestamp] = varsel.hendelseTimestamp
40+
it[insertedTimestamp] = Instant.now()
41+
}.insertedCount
42+
}
43+
44+
fun update(varsel: UpdateEksterntVarselRow): Int = transaction {
45+
EksterneVarslerTable.update({
46+
EksterneVarslerTable.varselId eq varsel.varselId
47+
}) {
48+
it[varselType] = varsel.varselType
49+
it[varselStatus] = varsel.varselStatus
50+
it[hendelseNavn] = varsel.hendelseName
51+
it[hendelseTimestamp] = varsel.hendelseTimestamp
52+
it[updatedTimestamp] = Instant.now()
53+
}
54+
}
55+
}

apps/min-side-varsler/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/repository/VarselRepository.kt

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package no.nav.paw.arbeidssoekerregisteret.repository
22

3+
import no.nav.paw.arbeidssoekerregisteret.model.EksterneVarslerTable
34
import no.nav.paw.arbeidssoekerregisteret.model.InsertVarselRow
45
import no.nav.paw.arbeidssoekerregisteret.model.Paging
56
import no.nav.paw.arbeidssoekerregisteret.model.UpdateVarselRow
@@ -8,6 +9,7 @@ import no.nav.paw.arbeidssoekerregisteret.model.VarselRow
89
import no.nav.paw.arbeidssoekerregisteret.model.VarslerTable
910
import no.nav.paw.arbeidssoekerregisteret.model.asSortOrder
1011
import no.nav.paw.arbeidssoekerregisteret.model.asVarselRow
12+
import org.jetbrains.exposed.sql.JoinType
1113
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
1214
import org.jetbrains.exposed.sql.and
1315
import org.jetbrains.exposed.sql.deleteWhere
@@ -21,14 +23,16 @@ import java.util.*
2123
class VarselRepository {
2224

2325
fun findAll(paging: Paging = Paging.none()): List<VarselRow> = transaction {
24-
VarslerTable.selectAll()
26+
VarslerTable.join(EksterneVarslerTable, JoinType.LEFT, VarslerTable.varselId, EksterneVarslerTable.varselId)
27+
.selectAll()
2528
.orderBy(VarslerTable.hendelseTimestamp, paging.order.asSortOrder())
2629
.offset(paging.offset).limit(paging.size)
2730
.map { it.asVarselRow() }
2831
}
2932

3033
fun findByVarselId(varselId: UUID): VarselRow? = transaction {
31-
VarslerTable.selectAll()
34+
VarslerTable.join(EksterneVarslerTable, JoinType.LEFT, VarslerTable.varselId, EksterneVarslerTable.varselId)
35+
.selectAll()
3236
.where { VarslerTable.varselId eq varselId }
3337
.map { it.asVarselRow() }
3438
.firstOrNull()
@@ -38,7 +42,8 @@ class VarselRepository {
3842
periodeId: UUID,
3943
paging: Paging = Paging.none(),
4044
): List<VarselRow> = transaction {
41-
VarslerTable.selectAll()
45+
VarslerTable.join(EksterneVarslerTable, JoinType.LEFT, VarslerTable.varselId, EksterneVarslerTable.varselId)
46+
.selectAll()
4247
.where { VarslerTable.periodeId eq periodeId }
4348
.orderBy(VarslerTable.hendelseTimestamp, paging.order.asSortOrder())
4449
.offset(paging.offset).limit(paging.size)
@@ -50,7 +55,8 @@ class VarselRepository {
5055
varselKilde: VarselKilde,
5156
paging: Paging = Paging.none(),
5257
): List<VarselRow> = transaction {
53-
VarslerTable.selectAll()
58+
VarslerTable.join(EksterneVarslerTable, JoinType.LEFT, VarslerTable.varselId, EksterneVarslerTable.varselId)
59+
.selectAll()
5460
.where { (VarslerTable.periodeId eq periodeId) and (VarslerTable.varselKilde eq varselKilde) }
5561
.orderBy(VarslerTable.hendelseTimestamp, paging.order.asSortOrder())
5662
.offset(paging.offset).limit(paging.size)

0 commit comments

Comments
 (0)