Skip to content
This repository has been archived by the owner on Nov 5, 2024. It is now read-only.

Commit

Permalink
f Legger til publisering av domeneevents i Arbeidssøkermodellen
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
tlheen committed Feb 8, 2023
1 parent d285b49 commit 2c8adda
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<Observer> = mutableListOf()

private var id: Int = 0
private var tilstand: ArbeidssokerState = IkkeArbeidssokerState
Expand All @@ -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 {
Expand Down Expand Up @@ -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.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package no.nav.fo.veilarbregistrering.arbeidssoker

interface Observable {

fun add(observer: Observer)
fun remove(observer: Observer)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package no.nav.fo.veilarbregistrering.arbeidssoker

interface Observer {

fun update(event: ArbeidssøkerDomainEvent)
}

0 comments on commit 2c8adda

Please sign in to comment.