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