Skip to content

Commit

Permalink
IS-2565: Add endpoint for creating a vurdering
Browse files Browse the repository at this point in the history
  • Loading branch information
vetlesolgaard committed Aug 9, 2024
1 parent 50ae3f9 commit d0ae781
Show file tree
Hide file tree
Showing 19 changed files with 448 additions and 45 deletions.
6 changes: 6 additions & 0 deletions src/main/kotlin/no/nav/syfo/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import io.ktor.server.config.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import no.nav.syfo.api.apiModule
import no.nav.syfo.application.VurderingService
import no.nav.syfo.infrastructure.clients.azuread.AzureAdClient
import no.nav.syfo.infrastructure.clients.veiledertilgang.VeilederTilgangskontrollClient
import no.nav.syfo.infrastructure.clients.wellknown.getWellKnown
import no.nav.syfo.infrastructure.database.applicationDatabase
import no.nav.syfo.infrastructure.database.databaseModule
import no.nav.syfo.infrastructure.database.repository.VurderingRepository
import org.slf4j.LoggerFactory
import java.util.concurrent.TimeUnit

Expand Down Expand Up @@ -43,13 +45,17 @@ fun main() {
databaseModule(
databaseEnvironment = environment.database,
)
val vurderingRepository = VurderingRepository(
database = applicationDatabase,
)

apiModule(
applicationState = applicationState,
environment = environment,
wellKnownInternalAzureAD = wellKnownInternalAzureAD,
database = applicationDatabase,
veilederTilgangskontrollClient = veilederTilgangskontrollClient,
vurderingService = VurderingService(vurderingRepository = vurderingRepository)
)
}
}
Expand Down
9 changes: 8 additions & 1 deletion src/main/kotlin/no/nav/syfo/api/ApiModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import no.nav.syfo.api.auth.JwtIssuerType
import no.nav.syfo.api.auth.installJwtAuthentication
import no.nav.syfo.api.endpoints.metricEndpoints
import no.nav.syfo.api.endpoints.podEndpoints
import no.nav.syfo.api.endpoints.registerManglendeMedvirkningEndpoints
import no.nav.syfo.application.VurderingService
import no.nav.syfo.infrastructure.NAV_CALL_ID_HEADER
import no.nav.syfo.infrastructure.clients.veiledertilgang.ForbiddenAccessVeilederException
import no.nav.syfo.infrastructure.clients.veiledertilgang.VeilederTilgangskontrollClient
Expand All @@ -37,6 +39,7 @@ fun Application.apiModule(
wellKnownInternalAzureAD: WellKnown,
database: DatabaseInterface,
veilederTilgangskontrollClient: VeilederTilgangskontrollClient,
vurderingService: VurderingService,
) {
installMetrics()
installCallId()
Expand All @@ -56,6 +59,10 @@ fun Application.apiModule(
routing {
podEndpoints(applicationState = applicationState, database = database)
metricEndpoints()
registerManglendeMedvirkningEndpoints(
veilederTilgangskontrollClient = veilederTilgangskontrollClient,
vurderingService = vurderingService
)
}
}

Expand Down Expand Up @@ -110,7 +117,7 @@ fun Application.installStatusPages() {
cause.response.status
}

is IllegalArgumentException, is BadRequestException, -> {
is IllegalArgumentException, is BadRequestException -> {
HttpStatusCode.BadRequest
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package no.nav.syfo.api.endpoints

import io.ktor.http.HttpStatusCode
import io.ktor.server.application.call
import io.ktor.server.request.receive
import io.ktor.server.response.respond
import io.ktor.server.routing.Route
import io.ktor.server.routing.get
import io.ktor.server.routing.post
import io.ktor.server.routing.route
import no.nav.syfo.api.model.NewVurderingRequestDTO
import no.nav.syfo.api.model.NewVurderingResponseDTO
import no.nav.syfo.application.VurderingService
import no.nav.syfo.infrastructure.clients.veiledertilgang.VeilederTilgangskontrollClient
import no.nav.syfo.infrastructure.clients.veiledertilgang.validateVeilederAccess
import no.nav.syfo.util.getCallId
import no.nav.syfo.util.getNAVIdent

fun Route.registerManglendeMedvirkningEndpoints(
veilederTilgangskontrollClient: VeilederTilgangskontrollClient,
vurderingService: VurderingService,
) {
route("/api/internad/v1") {
get("/vurderinger") {
// TODO: Implement
call.respond(HttpStatusCode.NotImplemented)
}

post("/vurderinger") {
val requestDTO = call.receive<NewVurderingRequestDTO>()

validateVeilederAccess(
action = "POST /vurderinger",
personident = requestDTO.personident,
veilederTilgangskontrollClient = veilederTilgangskontrollClient,
) {
val callId = call.getCallId()
if (requestDTO.document.isEmpty()) {
throw IllegalArgumentException("Vurdering can't have empty document, callId: $callId")
}

val newVurdering = vurderingService.createNewVurdering(
personident = requestDTO.personident,
veilederident = call.getNAVIdent(),
vurderingType = requestDTO.vurderingType,
begrunnelse = requestDTO.begrunnelse,
document = requestDTO.document,
varselSvarfrist = requestDTO.varselSvarfrist,
callId = callId,
)

call.respond(HttpStatusCode.Created, NewVurderingResponseDTO.fromVurdering(newVurdering))
}
}

post("/get-vurderinger") {
// TODO: Implement
call.respond(HttpStatusCode.NotImplemented)
}
}
}
14 changes: 14 additions & 0 deletions src/main/kotlin/no/nav/syfo/api/model/NewVurderingRequestDTO.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package no.nav.syfo.api.model

import no.nav.syfo.domain.Personident
import no.nav.syfo.domain.VurderingType
import no.nav.syfo.domain.api.DocumentComponent
import java.time.LocalDate

data class NewVurderingRequestDTO(
val personident: Personident,
val vurderingType: VurderingType,
val begrunnelse: String,
val document: List<DocumentComponent>,
val varselSvarfrist: LocalDate?,
)
43 changes: 43 additions & 0 deletions src/main/kotlin/no/nav/syfo/api/model/NewVurderingResponseDTO.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package no.nav.syfo.api.model

import no.nav.syfo.domain.JournalpostId
import no.nav.syfo.domain.ManglendeMedvirkningVurdering
import no.nav.syfo.domain.Personident
import no.nav.syfo.domain.Varsel
import no.nav.syfo.domain.Veilederident
import no.nav.syfo.domain.VurderingType
import no.nav.syfo.domain.api.DocumentComponent
import java.time.OffsetDateTime
import java.util.UUID

data class NewVurderingResponseDTO(
val uuid: UUID,
val personident: Personident,
val veilederident: Veilederident,
val createdAt: OffsetDateTime,
val begrunnelse: String,
val document: List<DocumentComponent>,
val journalpostId: JournalpostId?,
val vurderingType: VurderingType,
val varsel: Varsel?,
) {

companion object {

fun fromVurdering(vurdering: ManglendeMedvirkningVurdering): NewVurderingResponseDTO =
NewVurderingResponseDTO(
uuid = vurdering.uuid,
personident = vurdering.personident,
veilederident = vurdering.veilederident,
createdAt = vurdering.createdAt,
begrunnelse = vurdering.begrunnelse,
document = vurdering.document,
journalpostId = vurdering.journalpostId,
vurderingType = vurdering.vurderingType,
varsel = when (vurdering) {
is ManglendeMedvirkningVurdering.Forhandsvarsel -> vurdering.varsel
else -> null
},
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ interface IVurderingRepository {
fun saveManglendeMedvirkningVurdering(
manglendeMedvirkning: ManglendeMedvirkningVurdering,
vurderingPdf: ByteArray,
): ManglendeMedvirkningVurdering?
): ManglendeMedvirkningVurdering
}
45 changes: 45 additions & 0 deletions src/main/kotlin/no/nav/syfo/application/VurderingService.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package no.nav.syfo.application

import no.nav.syfo.domain.ManglendeMedvirkningVurdering
import no.nav.syfo.domain.Personident
import no.nav.syfo.domain.Veilederident
import no.nav.syfo.domain.VurderingType
import no.nav.syfo.domain.api.DocumentComponent
import no.nav.syfo.infrastructure.database.repository.VurderingRepository
import java.time.LocalDate

class VurderingService(
private val vurderingRepository: VurderingRepository,
) {

fun createNewVurdering(
personident: Personident,
veilederident: Veilederident,
vurderingType: VurderingType,
begrunnelse: String,
document: List<DocumentComponent>,
varselSvarfrist: LocalDate?,
callId: String,
): ManglendeMedvirkningVurdering {
val newVurdering = ManglendeMedvirkningVurdering.new(
personident = personident,
veilederident = veilederident,
begrunnelse = begrunnelse,
document = document,
varselSvarfrist = varselSvarfrist,
type = vurderingType,
)

// TODO: Get vurdering pdf from ispdfgen

val savedVurdering = vurderingRepository.saveManglendeMedvirkningVurdering(
vurdering = newVurdering,
vurderingPdf = byteArrayOf(),
)

// TODO: Journalfor vurdering
// TODO: Publish new vurdering

return savedVurdering
}
}
8 changes: 4 additions & 4 deletions src/main/kotlin/no/nav/syfo/domain/DocumentComponent.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.syfo.aktivitetskrav.api
package no.nav.syfo.domain.api

data class DocumentComponentDTO(
data class DocumentComponent(
val type: DocumentComponentType,
val key: String? = null,
val title: String?,
Expand All @@ -11,11 +11,11 @@ data class DocumentComponentDTO(
}
}

fun List<DocumentComponentDTO>.sanitizeForPdfGen(): List<DocumentComponentDTO> = this.map {
fun List<DocumentComponent>.sanitizeForPdfGen(): List<DocumentComponent> = this.map {
it.copy(
texts = it.texts.map { text ->
text.toCharArray()
.filter { char -> char !in DocumentComponentDTO.illegalCharacters }
.filter { char -> char !in DocumentComponent.illegalCharacters }
.joinToString("")
}
)
Expand Down
Loading

0 comments on commit d0ae781

Please sign in to comment.