Skip to content

Commit

Permalink
Flyttet funksjonalitet mellom controllere (#1181)
Browse files Browse the repository at this point in the history
* Flyttet funksjonalitet fra pdfSøknadController til søknadKvitteringController

* Fjern unprotected

* Ktlint

* Slettet PdfKvitteringService og la på token på testen

---------

Co-authored-by: Fredrik Garseg Mørk <[email protected]>
Co-authored-by: Fredrik Garseg Mørk <[email protected]>
  • Loading branch information
3 people authored Dec 12, 2024
1 parent f897f2b commit 2ba7732
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 120 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,23 +1,50 @@
package no.nav.familie.ef.mottak.api

import no.nav.familie.ef.mottak.api.dto.Kvittering
import no.nav.familie.ef.mottak.service.SøknadskvitteringService
import no.nav.security.token.support.core.api.Unprotected
import no.nav.familie.ef.mottak.util.okEllerKastException
import no.nav.familie.kontrakter.ef.søknad.SøknadBarnetilsyn
import no.nav.familie.kontrakter.ef.søknad.SøknadMedVedlegg
import no.nav.familie.kontrakter.ef.søknad.SøknadOvergangsstønad
import no.nav.familie.kontrakter.ef.søknad.SøknadSkolepenger
import no.nav.familie.sikkerhet.EksternBrukerUtils
import no.nav.security.token.support.core.api.ProtectedWithClaims
import org.springframework.context.annotation.Profile
import org.springframework.http.MediaType.APPLICATION_JSON_VALUE
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@Profile("!prod")
@RequestMapping("api/soknadskvittering", produces = [APPLICATION_JSON_VALUE])
@Unprotected
@ProtectedWithClaims(
issuer = EksternBrukerUtils.ISSUER_TOKENX,
claimMap = ["acr=Level4"],
)
class SøknadskvitteringController(
valknadKvitteringService: SøknadskvitteringService,
) {
@GetMapping("{søknadId}")
fun hentSøknad(
@PathVariable søknadId: String,
): ByteArray = søknadKvitteringService.hentSøknadPdf(søknadId)

@PostMapping("overgangsstonad")
fun overgangsstønad(
@RequestBody søknad: SøknadMedVedlegg<SøknadOvergangsstønad>,
): Kvittering = okEllerKastException { søknadKvitteringService.mottaOvergangsstønad(søknad) }

@PostMapping("barnetilsyn")
fun barnetilsyn(
@RequestBody søknad: SøknadMedVedlegg<SøknadBarnetilsyn>,
): Kvittering = okEllerKastException { søknadKvitteringService.mottaBarnetilsyn(søknad) }

@PostMapping("skolepenger")
fun skolepenger(
@RequestBody søknad: SøknadMedVedlegg<SøknadSkolepenger>,
): Kvittering = okEllerKastException { søknadKvitteringService.mottaSkolepenger(søknad) }
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,20 +1,83 @@
package no.nav.familie.ef.mottak.service

import no.nav.familie.ef.mottak.api.dto.Kvittering
import no.nav.familie.ef.mottak.integration.FamilieDokumentClient
import no.nav.familie.ef.mottak.mapper.SøknadMapper
import no.nav.familie.ef.mottak.repository.SøknadRepository
import no.nav.familie.ef.mottak.repository.VedleggRepository
import no.nav.familie.ef.mottak.repository.domain.EncryptedFile
import no.nav.familie.ef.mottak.repository.domain.Søknad
import no.nav.familie.ef.mottak.repository.domain.Vedlegg
import no.nav.familie.ef.mottak.repository.util.findByIdOrThrow
import no.nav.familie.kontrakter.ef.søknad.SøknadBarnetilsyn
import no.nav.familie.kontrakter.ef.søknad.SøknadMedVedlegg
import no.nav.familie.kontrakter.ef.søknad.SøknadOvergangsstønad
import no.nav.familie.kontrakter.ef.søknad.SøknadSkolepenger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.util.UUID

@Service
@Transactional
class SøknadskvitteringService(
private valknadRepository: SøknadRepository,
private val vedleggRepository: VedleggRepository,
private val dokumentClient: FamilieDokumentClient,
private val taskProsesseringService: TaskProsesseringService,
) {
private val logger = LoggerFactory.getLogger(this::class.java)

fun hentSøknadPdf(søknadId: String): ByteArray {
val søknad = hentSøknad(søknadId)
return søknad.søknadPdf?.bytes ?: error("Søknadspdf mangler for søknad med id: $søknadId")
}

@Transactional
fun mottaOvergangsstønad(søknad: SøknadMedVedlegg<SøknadOvergangsstønad>): Kvittering {
val søknadDb = SøknadMapper.fromDto(søknad.søknad, true)
val vedlegg = mapVedlegg(søknadDb.id, søknad.vedlegg)
return motta(søknadDb, vedlegg)
}

@Transactional
fun mottaBarnetilsyn(søknad: SøknadMedVedlegg<SøknadBarnetilsyn>): Kvittering {
val søknadDb = SøknadMapper.fromDto(søknad.søknad, true)
val vedlegg = mapVedlegg(søknadDb.id, søknad.vedlegg)
return motta(søknadDb, vedlegg)
}

@Transactional
fun mottaSkolepenger(søknad: SøknadMedVedlegg<SøknadSkolepenger>): Kvittering {
val søknadDb = SøknadMapper.fromDto(søknad.søknad, true)
val vedlegg = mapVedlegg(søknadDb.id, søknad.vedlegg)
return motta(søknadDb, vedlegg)
}

private fun mapVedlegg(
knadDbId: String,
vedleggMetadata: List<no.nav.familie.kontrakter.ef.søknad.Vedlegg>,
): List<Vedlegg> =
vedleggMetadata.map {
Vedlegg(
id = UUID.fromString(it.id),
søknadId = søknadDbId,
navn = it.navn,
tittel = it.tittel,
innhold = EncryptedFile(dokumentClient.hentVedlegg(it.id)),
)
}

private fun motta(
knadDb: Søknad,
vedlegg: List<Vedlegg>,
): Kvittering {
val lagretSkjema = søknadRepository.insert(søknadDb)
vedleggRepository.insertAll(vedlegg)
taskProsesseringService.startPdfKvitteringTaskProsessering(søknadDb)
logger.info("Mottatt pdf-søknad med id ${lagretSkjema.id}")
return Kvittering(lagretSkjema.id, "Pdf-søknad lagret med id ${lagretSkjema.id} er registrert mottatt.")
}

private fun hentSøknad(søknadId: String): Søknad = søknadRepository.findByIdOrThrow(søknadId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import no.nav.familie.ef.mottak.repository.domain.EncryptedFile
import no.nav.familie.ef.mottak.service.Testdata
import no.nav.familie.kontrakter.felles.objectMapper
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.web.client.exchange
Expand All @@ -19,6 +20,11 @@ internal class SøknadskvitteringControllerTest : IntegrasjonSpringRunnerTest()
@Autowired
lateinit var søknadRepository: SøknadRepository

@BeforeEach
fun setUp() {
headers.setBearerAuth(søkerBearerToken())
}

@Test
internal fun `Skal returnere 200 OK for å hente søknad med id`() {
val søknadPdfBytes = objectMapper.writeValueAsBytes(Testdata.søknadOvergangsstønad)
Expand Down

0 comments on commit 2ba7732

Please sign in to comment.