From 2c8adda5431feb34a0c18a726774ce10466aea19 Mon Sep 17 00:00:00 2001 From: Terje Heen Date: Tue, 7 Feb 2023 12:16:55 +0100 Subject: [PATCH] =?UTF-8?q?f=20Legger=20til=20publisering=20av=20domeneeve?= =?UTF-8?q?nts=20i=20Arbeidss=C3=B8kermodellen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sørger for å publsiere en ArbeidssøkerperiodeStartetEvent eller ArbeidssøkerperiodeAvsluttetEvent når vi starter en ny periode, eller avslutter en eksisterende periode. Konsumenter av Arbeissøker kan legge seg til og lytte på hendelser som publiseres. --- .../arbeidssoker/Arbeidssoker.kt | 17 +++++++++++-- .../Arbeidss\303\270kerDomainEvent.kt" | 24 +++++++++++++++++++ .../arbeidssoker/Observable.kt | 7 ++++++ .../arbeidssoker/Observer.kt | 6 +++++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 "src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidss\303\270kerDomainEvent.kt" create mode 100644 src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observable.kt create mode 100644 src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observer.kt diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidssoker.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidssoker.kt index ccaed08a4..1d721d57d 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidssoker.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidssoker.kt @@ -8,7 +8,9 @@ import java.time.format.DateTimeFormatter /** * Root aggregate - all kommunikasjon mot Arbeidssøker og underliggende elementer skal gå via dette objektet. */ -class Arbeidssoker(private val foedselsnummer: Foedselsnummer) { +class Arbeidssoker(private val foedselsnummer: Foedselsnummer): Observable { + + private val observers: MutableList = mutableListOf() private var id: Int = 0 private var tilstand: ArbeidssokerState = IkkeArbeidssokerState @@ -31,10 +33,13 @@ class Arbeidssoker(private val foedselsnummer: Foedselsnummer) { private fun startPeriode(fraDato: LocalDateTime) { this.arbeidssokerperioder.add(Arbeidssokerperiode(fraDato, null)) + this.observers.forEach { it.update(ArbeidssøkerperiodeStartetEvent(foedselsnummer, fraDato.toLocalDate()))} } private fun avsluttPeriode(tilDato: LocalDateTime) { - sistePeriode()?.avslutt(atTheEndOfYesterday(tilDato)) ?: throw IllegalStateException("Kan ikke avslutte en periode som ikke finnes") + val tilOgMedDato = atTheEndOfYesterday(tilDato) + sistePeriode()?.avslutt(tilOgMedDato) ?: throw IllegalStateException("Kan ikke avslutte en periode som ikke finnes") + this.observers.forEach { it.update(ArbeidssøkerperiodeAvsluttetEvent(foedselsnummer, tilOgMedDato.toLocalDate()))} } private fun atTheEndOfYesterday(localDateTime: LocalDateTime): LocalDateTime { @@ -65,6 +70,14 @@ class Arbeidssoker(private val foedselsnummer: Foedselsnummer) { this.tilstand = tilstand } + override fun add(observer: Observer) { + this.observers.add(observer) + } + + override fun remove(observer: Observer) { + this.observers.remove(observer) + } + /** * Ikke arbeidssøker betyr at du aldri har vært arbeidssøker. */ diff --git "a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidss\303\270kerDomainEvent.kt" "b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidss\303\270kerDomainEvent.kt" new file mode 100644 index 000000000..de4ebbc1d --- /dev/null +++ "b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Arbeidss\303\270kerDomainEvent.kt" @@ -0,0 +1,24 @@ +package no.nav.fo.veilarbregistrering.arbeidssoker + +import no.nav.fo.veilarbregistrering.bruker.Foedselsnummer +import java.time.LocalDate + +interface ArbeidssøkerDomainEvent { + + fun fødselsnummer(): Foedselsnummer +} + +class ArbeidssøkerperiodeStartetEvent( + private val foedselsnummer: Foedselsnummer, + private val fraOgMedDato: LocalDate +): ArbeidssøkerDomainEvent { + + override fun fødselsnummer(): Foedselsnummer = foedselsnummer +} + +class ArbeidssøkerperiodeAvsluttetEvent( + private val foedselsnummer: Foedselsnummer, + private val tilOgMedDato: LocalDate): ArbeidssøkerDomainEvent { + + override fun fødselsnummer(): Foedselsnummer = foedselsnummer +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observable.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observable.kt new file mode 100644 index 000000000..8e8a6598f --- /dev/null +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observable.kt @@ -0,0 +1,7 @@ +package no.nav.fo.veilarbregistrering.arbeidssoker + +interface Observable { + + fun add(observer: Observer) + fun remove(observer: Observer) +} diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observer.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observer.kt new file mode 100644 index 000000000..896e856b6 --- /dev/null +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/Observer.kt @@ -0,0 +1,6 @@ +package no.nav.fo.veilarbregistrering.arbeidssoker + +interface Observer { + + fun update(event: ArbeidssøkerDomainEvent) +} \ No newline at end of file