-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lager serier av dokumenter & har med vedtak i saken
- Loading branch information
Showing
24 changed files
with
303 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
66 changes: 66 additions & 0 deletions
66
dokument/domain/src/main/kotlin/dokument/domain/DokumentHendelseSerie.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
package dokument.domain | ||
|
||
import arrow.core.NonEmptyList | ||
import dokument.domain.hendelser.DistribuertDokumentHendelse | ||
import dokument.domain.hendelser.DokumentHendelse | ||
import dokument.domain.hendelser.GenerertDokumentHendelse | ||
import dokument.domain.hendelser.JournalførtDokumentHendelse | ||
import java.util.UUID | ||
|
||
data class DokumentHendelseSerie( | ||
val sakId: UUID, | ||
val dokumenter: NonEmptyList<DokumentHendelse>, | ||
) : List<DokumentHendelse> by dokumenter { | ||
/** Dette vil være hendelsen som første til dokumentgenereringen og denne dokumenthendelsesserien*/ | ||
val relatertHendelse = dokumenter[0].relatertHendelse | ||
|
||
fun leggTilHendelse(hendelse: DokumentHendelse): DokumentHendelseSerie { | ||
return DokumentHendelseSerie(sakId, dokumenter + hendelse) | ||
} | ||
|
||
fun dokumenttilstand(): Dokumenttilstand { | ||
return when (val dokument = this.dokumenter.lastOrNull()) { | ||
is GenerertDokumentHendelse -> { | ||
if (dokument.skalSendeBrev) { | ||
Dokumenttilstand.GENERERT | ||
} else { | ||
Dokumenttilstand.SKAL_IKKE_GENERERE | ||
} | ||
} | ||
|
||
is JournalførtDokumentHendelse -> Dokumenttilstand.JOURNALFØRT | ||
is DistribuertDokumentHendelse -> Dokumenttilstand.SENDT | ||
} | ||
} | ||
|
||
init { | ||
dokumenter.map { it.sakId }.distinct().let { | ||
require(listOf(sakId) == it) { | ||
"Forventer at alle dokumenter er relatert til samme sak. Forventet $sakId, men var $it}" | ||
} | ||
} | ||
dokumenter.zipWithNext { a, b -> | ||
require(a.versjon < b.versjon) { | ||
"Forventer at dokumenter er sortert etter versjon. Var ${a.versjon} og ${b.versjon}" | ||
} | ||
} | ||
if (dokumenter.isNotEmpty()) { | ||
require(dokumenter[0] is GenerertDokumentHendelse) { | ||
"Forventer at første dokument er generert. Var ${dokumenter[0]}" | ||
} | ||
} | ||
if (dokumenter.size > 1) { | ||
require(dokumenter[1] is JournalførtDokumentHendelse) { | ||
"Forventer at det andre dokumentet er Journalført. Var ${dokumenter[1]}" | ||
} | ||
} | ||
if (dokumenter.size > 2) { | ||
require(dokumenter[2] is DistribuertDokumentHendelse) { | ||
"Forventer at det siste dokumenter er distribuert. Var ${dokumenter[2]}" | ||
} | ||
} | ||
require(dokumenter.size <= 3) { | ||
"Forventer at det er maks 3 dokumenter i serien. Var ${dokumenter.size}" | ||
} | ||
} | ||
} |
75 changes: 75 additions & 0 deletions
75
dokument/domain/src/main/kotlin/dokument/domain/DokumentHendelser.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package dokument.domain | ||
|
||
import arrow.core.nonEmptyListOf | ||
import dokument.domain.hendelser.DistribuertDokumentHendelse | ||
import dokument.domain.hendelser.DokumentHendelse | ||
import dokument.domain.hendelser.GenerertDokumentHendelse | ||
import dokument.domain.hendelser.JournalførtDokumentHendelse | ||
import no.nav.su.se.bakover.hendelse.domain.HendelseId | ||
import java.util.UUID | ||
|
||
/** | ||
* Forventer at alle dokumenter i serien er relatert til samme sak. | ||
*/ | ||
data class DokumentHendelser( | ||
val sakId: UUID, | ||
val serier: List<DokumentHendelseSerie>, | ||
) : List<DokumentHendelseSerie> by serier { | ||
|
||
init { | ||
serier.map { it.sakId }.distinct().let { | ||
if (it.isNotEmpty()) { | ||
require(listOf(sakId) == it) { | ||
"Forventer at alle dokumenter er relatert til samme sak. Forventet $sakId, men var $it}" | ||
} | ||
} | ||
} | ||
} | ||
|
||
fun hentSerieForRelatertHendelse(hendelseId: HendelseId): DokumentHendelseSerie? { | ||
return serier.find { | ||
it.dokumenter.map { it.relatertHendelse }.contains(hendelseId) | ||
} | ||
} | ||
|
||
fun hentGenererte(): List<GenerertDokumentHendelse> { | ||
return serier.flatMap { it.dokumenter }.filterIsInstance<GenerertDokumentHendelse>() | ||
} | ||
|
||
companion object { | ||
fun empty(sakId: UUID) = DokumentHendelser(sakId = sakId, serier = emptyList()) | ||
|
||
fun create(sakId: UUID, dokumenter: List<DokumentHendelse>): DokumentHendelser { | ||
dokumenter.map { it.sakId }.distinct().let { | ||
if (it.isNotEmpty()) { | ||
require(listOf(sakId) == it) { | ||
"Forventer at alle dokumenter er relatert til samme sak. Forventet $sakId, men var $it}" | ||
} | ||
} | ||
} | ||
val sorterteDokumenter = dokumenter.sortedBy { it.versjon } | ||
|
||
return sorterteDokumenter.fold(mapOf<HendelseId, DokumentHendelseSerie>()) { acc, hendelse -> | ||
val hendelseId = hendelse.hendelseId | ||
when (hendelse) { | ||
is GenerertDokumentHendelse -> acc.plus( | ||
hendelseId to DokumentHendelseSerie( | ||
sakId = sakId, | ||
dokumenter = nonEmptyListOf(hendelse), | ||
), | ||
) | ||
|
||
is JournalførtDokumentHendelse -> acc.plus( | ||
hendelseId to acc[hendelse.relatertHendelse]!!.leggTilHendelse(hendelse), | ||
).minus(hendelse.relatertHendelse) | ||
|
||
is DistribuertDokumentHendelse -> acc.plus( | ||
hendelseId to acc[hendelse.relatertHendelse]!!.leggTilHendelse(hendelse), | ||
).minus(hendelse.relatertHendelse) | ||
} | ||
}.values.toList().let { | ||
DokumentHendelser(sakId = sakId, serier = it) | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.