@@ -2,18 +2,16 @@ package no.nav.klage.document.api
22
33import io.swagger.v3.oas.annotations.Operation
44import io.swagger.v3.oas.annotations.tags.Tag
5+ import no.nav.klage.document.api.views.DocumentUpdateInput
6+ import no.nav.klage.document.api.views.DocumentVersionView
57import no.nav.klage.document.api.views.DocumentView
68import no.nav.klage.document.config.SecurityConfiguration.Companion.ISSUER_AAD
7- import no.nav.klage.document.domain.Document
9+ import no.nav.klage.document.domain.DocumentVersion
810import no.nav.klage.document.service.DocumentService
11+ import no.nav.klage.document.util.TokenUtil
912import no.nav.klage.document.util.getLogger
1013import no.nav.klage.document.util.getSecureLogger
1114import no.nav.security.token.support.core.api.ProtectedWithClaims
12- import no.nav.security.token.support.core.context.TokenValidationContextHolder
13- import org.springframework.http.HttpHeaders
14- import org.springframework.http.HttpStatus
15- import org.springframework.http.MediaType
16- import org.springframework.http.ResponseEntity
1715import org.springframework.web.bind.annotation.*
1816import java.util.*
1917
@@ -23,7 +21,7 @@ import java.util.*
2321@RequestMapping(" /documents" )
2422class DocumentController (
2523 private val documentService : DocumentService ,
26- private val tokenValidationContextHolder : TokenValidationContextHolder
24+ private val tokenUtil : TokenUtil ,
2725) {
2826
2927 companion object {
@@ -52,21 +50,28 @@ class DocumentController(
5250 @PutMapping(" /{documentId}" )
5351 fun updateDocument (
5452 @PathVariable(" documentId" ) documentId : UUID ,
55- @RequestBody json : String
53+ @RequestBody(required = false ) input : DocumentUpdateInput ,
5654 ): DocumentView {
5755 log(" updateDocument called with id $documentId " )
58- secureLogger.debug(" updateDocument with id {}: received json: {}" , documentId, json)
59- return mapToDocumentView(documentService.updateDocument(documentId, json))
56+ secureLogger.debug(" updateDocument with id {}: current version: {} received json: {}" , documentId, input.currentVersion, input.json)
57+ return mapToDocumentView(documentService.updateDocument(
58+ documentId = documentId,
59+ json = input.json,
60+ currentVersion = input.currentVersion,
61+ ))
6062 }
6163
6264 @Operation(
6365 summary = " Get document" ,
6466 description = " Get document"
6567 )
66- @GetMapping(" /{documentId}" )
67- fun getDocument (@PathVariable(" documentId" ) documentId : UUID ): DocumentView {
68- log(" getDocument called with id $documentId " )
69- return mapToDocumentView(documentService.getDocument(documentId))
68+ @GetMapping(" /{documentId}" , " /{documentId}/versions/{version}" )
69+ fun getDocument (
70+ @PathVariable(" documentId" ) documentId : UUID ,
71+ @PathVariable(" version" , required = false ) version : Int? ,
72+ ): DocumentView {
73+ log(" getDocument called with id $documentId and version $version " )
74+ return mapToDocumentView(documentService.getDocument(documentId = documentId, version = version))
7075 }
7176
7277 @Operation(
@@ -80,43 +85,42 @@ class DocumentController(
8085 }
8186
8287 @Operation(
83- summary = " Generer PDF " ,
84- description = " Generer PDF "
88+ summary = " Get document versions " ,
89+ description = " Get document versions "
8590 )
86- @ResponseBody
87- @GetMapping(" /{documentId}/pdf" )
88- fun getDocumentAsPDF (
89- @PathVariable(" documentId" ) documentId : UUID
90- ): ResponseEntity <ByteArray > {
91- log(" getDocumentAsPDF with id : $documentId " )
92-
93- val pdfDocument = documentService.getDocumentAsPDF(documentId)
91+ @GetMapping(" /{documentId}/versions" )
92+ fun getDocumentVersions (@PathVariable(" documentId" ) documentId : UUID ): List <DocumentVersionView > {
93+ log(" getDocumentVersions called with id $documentId " )
94+ val documentVersions = documentService.getDocumentVersions(documentId = documentId)
9495
95- val responseHeaders = HttpHeaders ()
96- responseHeaders.contentType = MediaType .APPLICATION_PDF
97- responseHeaders.add(" Content-Disposition" , " inline; filename=${pdfDocument.filename} .pdf" )
98- return ResponseEntity (
99- pdfDocument.bytes,
100- responseHeaders,
101- HttpStatus .OK
102- )
96+ return documentVersions.map {
97+ mapToDocumentVersionView(it)
98+ }
10399 }
104100
105- private fun mapToDocumentView (document : Document ): DocumentView =
101+ private fun mapToDocumentView (documentVersion : DocumentVersion ): DocumentView =
106102 DocumentView (
107- id = document.id,
108- json = document.json,
109- created = document.created,
110- modified = document.modified
103+ id = documentVersion.documentId,
104+ documentId = documentVersion.documentId,
105+ version = documentVersion.version,
106+ json = documentVersion.json,
107+ authorNavIdent = documentVersion.authorNavIdent,
108+ created = documentVersion.created,
109+ modified = documentVersion.modified
110+ )
111+
112+ private fun mapToDocumentVersionView (documentVersion : DocumentVersion ): DocumentVersionView =
113+ DocumentVersionView (
114+ documentId = documentVersion.documentId,
115+ version = documentVersion.version,
116+ authorNavIdent = documentVersion.authorNavIdent,
117+ created = documentVersion.created,
118+ modified = documentVersion.modified
111119 )
112120
113121 private fun log (message : String ) {
114122 logger.debug(message)
115- secureLogger.debug(" {}. On-behalf-of: {}" , message, getIdent())
123+ secureLogger.debug(" {}. On-behalf-of: {}" , message, tokenUtil. getIdent())
116124 }
117125
118- fun getIdent (): String? =
119- tokenValidationContextHolder.tokenValidationContext.getJwtToken(ISSUER_AAD )
120- .jwtTokenClaims?.get(" NAVident" )?.toString()
121-
122126}
0 commit comments