Skip to content

Commit

Permalink
Merge pull request #4464 from navikt/feature/deltaker-prosent
Browse files Browse the repository at this point in the history
lagre full deltakelsesprosent hvis det mangler for AFT/VTA
  • Loading branch information
sondrele authored Oct 10, 2024
2 parents a7c3fb7 + 3f9a5ac commit d052660
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ private fun kafka(appConfig: AppConfig) = module {
arenaMigreringTiltaksgjennomforingProducer = get(),
tiltaksgjennomforingRepository = get(),
),
AmtDeltakerV1KafkaConsumer(config = config.consumers.amtDeltakerV1, deltakere = get()),
AmtDeltakerV1KafkaConsumer(config = config.consumers.amtDeltakerV1, tiltakstyper = get(), deltakere = get()),
AmtVirksomheterV1KafkaConsumer(
config = config.consumers.amtVirksomheterV1,
arrangorRepository = get(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,20 @@ class TiltakstypeRepository(private val db: Database) {
}
}

fun getByGjennomforingId(gjennomforingId: UUID): TiltakstypeDto {
@Language("PostgreSQL")
val query = """
select t.*
from tiltakstype_admin_dto_view t
join tiltaksgjennomforing g on g.tiltakstype_id = t.id
where g.id = ?::uuid
""".trimIndent()
val queryResult = queryOf(query, gjennomforingId).map { it.toTiltakstypeDto() }.asSingle
return requireNotNull(db.run(queryResult)) {
"Det finnes ingen tiltakstype for gjennomforing med id=$gjennomforingId"
}
}

fun getAll(
pagination: Pagination = Pagination.all(),
): PaginatedResult<TiltakstypeDto> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ class TiltakstypeService(
.recordStats()
.build()

private val cacheByGjennomforingId: Cache<UUID, TiltakstypeDto> = Caffeine.newBuilder()
.expireAfterWrite(12, TimeUnit.HOURS)
.maximumSize(10_000)
.recordStats()
.build()

fun isEnabled(tiltakskode: Tiltakskode?) = enabledTiltakskoder.contains(tiltakskode)

fun getAll(
Expand All @@ -46,4 +52,10 @@ class TiltakstypeService(
tiltakstypeRepository.getBySanityId(sanityId)
}
}

fun getByGjennomforingId(gjennomforingId: UUID): TiltakstypeDto {
return CacheUtils.tryCacheFirstNotNull(cacheByGjennomforingId, gjennomforingId) {
tiltakstypeRepository.getByGjennomforingId(gjennomforingId)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import kotlinx.serialization.json.decodeFromJsonElement
import no.nav.common.kafka.consumer.util.deserializer.Deserializers.uuidDeserializer
import no.nav.mulighetsrommet.api.domain.dbo.DeltakerDbo
import no.nav.mulighetsrommet.api.repositories.DeltakerRepository
import no.nav.mulighetsrommet.api.services.TiltakstypeService
import no.nav.mulighetsrommet.domain.Tiltakskode
import no.nav.mulighetsrommet.domain.dto.DeltakerStatus
import no.nav.mulighetsrommet.domain.dto.amt.AmtDeltakerV1Dto
import no.nav.mulighetsrommet.kafka.KafkaTopicConsumer
Expand All @@ -15,6 +17,7 @@ import java.util.*

class AmtDeltakerV1KafkaConsumer(
config: Config,
private val tiltakstyper: TiltakstypeService,
private val deltakere: DeltakerRepository,
) : KafkaTopicConsumer<UUID, JsonElement>(
config,
Expand Down Expand Up @@ -47,14 +50,28 @@ class AmtDeltakerV1KafkaConsumer(
}
}

private fun AmtDeltakerV1Dto.toDeltakerDbo(): DeltakerDbo = DeltakerDbo(
id = id,
gjennomforingId = gjennomforingId,
startDato = startDato,
sluttDato = sluttDato,
registrertTidspunkt = registrertDato,
endretTidspunkt = endretDato,
stillingsprosent = prosentStilling?.toDouble(),
status = status,
)
private fun AmtDeltakerV1Dto.toDeltakerDbo(): DeltakerDbo {
val tiltakstype = tiltakstyper.getByGjennomforingId(gjennomforingId)

val stillingsprosent = when (tiltakstype.tiltakskode) {
// Hvis stillingsprosent mangler for AFT/VTA så kan det antas å være 100
Tiltakskode.ARBEIDSFORBEREDENDE_TRENING, Tiltakskode.VARIG_TILRETTELAGT_ARBEID_SKJERMET -> {
prosentStilling?.toDouble() ?: 100.0
}

// TODO: ikke lese inn stillingsprosent for andre tiltakstyper?
// Skal visstnok ikke være relevant for disse, selv om det finnes en del data der per i dag
else -> prosentStilling?.toDouble()
}
return DeltakerDbo(
id = id,
gjennomforingId = gjennomforingId,
startDato = startDato,
sluttDato = sluttDato,
registrertTidspunkt = registrertDato,
endretTidspunkt = endretDato,
stillingsprosent = stillingsprosent,
status = status,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import no.nav.mulighetsrommet.api.domain.dbo.DeltakerDbo
import no.nav.mulighetsrommet.api.fixtures.MulighetsrommetTestDomain
import no.nav.mulighetsrommet.api.fixtures.TiltaksgjennomforingFixtures
import no.nav.mulighetsrommet.api.repositories.DeltakerRepository
import no.nav.mulighetsrommet.api.repositories.TiltaksgjennomforingRepository
import no.nav.mulighetsrommet.api.repositories.TiltakstypeRepository
import no.nav.mulighetsrommet.api.services.TiltakstypeService
import no.nav.mulighetsrommet.database.kotest.extensions.FlywayDatabaseTestListener
import no.nav.mulighetsrommet.database.kotest.extensions.truncateAll
import no.nav.mulighetsrommet.domain.dto.DeltakerStatus
Expand All @@ -26,10 +27,13 @@ class AmtDeltakerV1KafkaConsumerTest : FunSpec({

context("consume deltakere") {
beforeTest {
MulighetsrommetTestDomain().initialize(database.db)

val tiltaksgjennomforinger = TiltaksgjennomforingRepository(database.db)
tiltaksgjennomforinger.upsert(TiltaksgjennomforingFixtures.Oppfolging1)
MulighetsrommetTestDomain(
gjennomforinger = listOf(
TiltaksgjennomforingFixtures.Oppfolging1,
TiltaksgjennomforingFixtures.AFT1,
TiltaksgjennomforingFixtures.VTA1,
),
).initialize(database.db)
}

afterEach {
Expand All @@ -39,7 +43,8 @@ class AmtDeltakerV1KafkaConsumerTest : FunSpec({
val deltakere = DeltakerRepository(database.db)
val deltakerConsumer = AmtDeltakerV1KafkaConsumer(
config = KafkaTopicConsumer.Config(id = "deltaker", topic = "deltaker"),
deltakere,
tiltakstyper = TiltakstypeService(TiltakstypeRepository(database.db), listOf()),
deltakere = deltakere,
)

val deltakelsesdato = LocalDateTime.of(2023, 3, 1, 0, 0, 0)
Expand Down Expand Up @@ -108,5 +113,21 @@ class AmtDeltakerV1KafkaConsumerTest : FunSpec({

deltakere.getAll().shouldBeEmpty()
}

test("tolker stillingsprosent som 100 hvis den mangler for forhåndsgodkjente tiltak") {
deltakerConsumer.consume(
amtDeltaker1.id,
Json.encodeToJsonElement(amtDeltaker1.copy(gjennomforingId = TiltaksgjennomforingFixtures.AFT1.id)),
)
deltakerConsumer.consume(
amtDeltaker2.id,
Json.encodeToJsonElement(amtDeltaker2.copy(gjennomforingId = TiltaksgjennomforingFixtures.VTA1.id)),
)

deltakere.getAll().shouldContainExactly(
deltaker1Dbo.copy(gjennomforingId = TiltaksgjennomforingFixtures.AFT1.id, stillingsprosent = 100.0),
deltaker2Dbo.copy(gjennomforingId = TiltaksgjennomforingFixtures.VTA1.id, stillingsprosent = 100.0),
)
}
}
})

0 comments on commit d052660

Please sign in to comment.