Skip to content

Commit

Permalink
Migrere til ny løsning for brukernotifikasjoner (varsler)
Browse files Browse the repository at this point in the history
  • Loading branch information
s148719 committed Nov 19, 2024
1 parent a9fbb34 commit 839dc17
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 88 deletions.
5 changes: 5 additions & 0 deletions libs/felles/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,11 @@
</exclusions>
</dependency>

<dependency>
<groupId>no.nav.tms.varsel</groupId>
<artifactId>java-builder</artifactId>
</dependency>

<!-- datasource -->
<dependency>
<groupId>com.zaxxer</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,14 @@
import no.nav.brukernotifikasjon.schemas.input.NokkelInput;
import no.nav.brukernotifikasjon.schemas.input.OppgaveInput;
import no.nav.farskapsportal.backend.libs.felles.config.egenskaper.FarskapsportalFellesEgenskaper;
import no.nav.farskapsportal.backend.libs.felles.consumer.brukernotifikasjon.Beskjedprodusent;
import no.nav.farskapsportal.backend.libs.felles.consumer.brukernotifikasjon.BrukernotifikasjonConsumer;
import no.nav.farskapsportal.backend.libs.felles.consumer.brukernotifikasjon.Ferdigprodusent;
import no.nav.farskapsportal.backend.libs.felles.consumer.brukernotifikasjon.Oppgaveprodusent;
import no.nav.farskapsportal.backend.libs.felles.consumer.brukernotifikasjon.*;
import no.nav.farskapsportal.backend.libs.felles.persistence.dao.OppgavebestillingDao;
import no.nav.farskapsportal.backend.libs.felles.service.PersistenceService;
import org.apache.kafka.clients.CommonClientConfigs;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.config.SaslConfigs;
import org.apache.kafka.common.config.SslConfigs;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
Expand Down Expand Up @@ -69,8 +67,8 @@ private Map<String, Object> getKafkaConfigProps() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BATCH_SIZE_CONFIG, 1);
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(
ProducerConfig.CLIENT_ID_CONFIG,
NAMESPACE_FARSKAPSPORTAL + getHostname(new InetSocketAddress(0)));
Expand All @@ -91,7 +89,6 @@ private Map<String, Object> getKafkaConfigProps() {
configProps.put(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, "JKS");
configProps.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SSL");
configProps.put("reconnect.backoff.ms", 100);
configProps.put("specific.avro.reader", "true");
return configProps;
}

Expand All @@ -110,15 +107,20 @@ public KafkaTemplate<NokkelInput, OppgaveInput> kafkaTemplateOppgave() {
return new KafkaTemplate<>(new DefaultKafkaProducerFactory<>(getKafkaConfigProps()));
}

@Bean("varsel")
public KafkaTemplate<String, String> kafkaTemplateOppretteVarsel() {
return new KafkaTemplate<>(new DefaultKafkaProducerFactory<>(getKafkaConfigProps()));
}

@Bean
BrukernotifikasjonConsumer brukernotifikasjonConsumer(
Beskjedprodusent beskjedprodusent,
Ferdigprodusent ferdigprodusent,
Oppgaveprodusent oppgaveprodusent,
Varselprodusent varselprodusent,
FarskapsportalFellesEgenskaper farskapsportalFellesEgenskaper)
throws MalformedURLException {
return new BrukernotifikasjonConsumer(
beskjedprodusent, ferdigprodusent, oppgaveprodusent, farskapsportalFellesEgenskaper);
beskjedprodusent, ferdigprodusent, varselprodusent, farskapsportalFellesEgenskaper);
}

@Bean
Expand All @@ -133,11 +135,11 @@ Beskjedprodusent beskjedprodusent(
}

@Bean
Oppgaveprodusent oppgaveprodusent(
@Qualifier("oppgave") KafkaTemplate<NokkelInput, OppgaveInput> kafkaTemplate,
Varselprodusent varselprodusent(
@Qualifier("varsel") KafkaTemplate<String, String> kafkaTemplate,
PersistenceService persistenceService)
throws MalformedURLException {
return new Oppgaveprodusent(
return new Varselprodusent(
kafkaTemplate,
persistenceService,
toUrl(farskapsportalFellesEgenskaper.getUrl()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,5 @@ public class Brukernotifikasjon {
private int synlighetBeskjedAntallMaaneder;
private int levetidOppgaveAntallDager;
private int sikkerhetsnivaaBeskjed;
private int sikkerhetsnivaaOppgave;
private boolean skruddPaa;
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
public class FarskapsportalFellesEgenskaper {

private String appnavn;
private String naisClusternavn;
private int maksAntallMaanederEtterFoedsel;
private int kontrollFarMaksAntallForsoek;
private String url;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,33 @@
@Slf4j
public class BrukernotifikasjonConsumer {

private static final String MELDING_OM_SIGNERT_FARSKAPSERKLAERING =
public static final String MELDING_OM_SIGNERT_FARSKAPSERKLAERING =
"Du har mottatt en signert farskapserklæring som er tilgjengelig for nedlasting i en begrenset tidsperiode.";
private static final String MELDING_OM_VENTENDE_FARSKAPSERKLAERING =
public static final String MELDING_OM_VENTENDE_FARSKAPSERKLAERING =
"Du har mottatt en farskapserklæring som venter på din signatur.";
private static final String MELDING_TIL_MOR_OM_AVBRUTT_SIGNERING =
public static final String MELDING_TIL_MOR_OM_AVBRUTT_SIGNERING =
"Fars signering ble avbrutt, aktuell farskapserklæring måtte derfor slettes. Mor kan opprette ny hvis ønskelig. Trykk her for å opprette ny farskapserklæring.";
private static final String MELDING_TIL_FAR_OM_AVBRUTT_SIGNERING =
public static final String MELDING_TIL_FAR_OM_AVBRUTT_SIGNERING =
"Fars signering ble avbrutt, aktuell farskapserklæring måtte derfor slettes. Mor kan opprette ny hvis ønskelig.";
private static final String MELDING_OM_MANGLENDE_SIGNERING =
public static final String MELDING_OM_MANGLENDE_SIGNERING =
"Aksjon kreves: Farskapserklæring opprettet den %s for barn med %s er ikke ferdigstilt. Våre systemer mangler informasjon om at far har signert. Far må logge inn på Farskapsportal og forsøke å signere eller oppdatere status på ny. Ta kontakt med NAV ved problemer.";
private static final String MELDING_OM_IKKE_UTFOERT_SIGNERINGSOPPGAVE =
public static final String MELDING_OM_IKKE_UTFOERT_SIGNERINGSOPPGAVE =
"Far har ikke signert farskapserklæringen innen fristen. Farskapserklæringen er derfor slettet. Mor kan opprette ny hvis ønskelig. Trykk her for å opprette ny farskapserklæring.";

private final Beskjedprodusent beskjedprodusent;
private final Ferdigprodusent ferdigprodusent;
private final Oppgaveprodusent oppgaveprodusent;
private final Varselprodusent varselprodusent;
private final FarskapsportalFellesEgenskaper farskapsportalFellesEgenskaper;

public BrukernotifikasjonConsumer(
Beskjedprodusent beskjedprodusent,
Ferdigprodusent ferdigprodusent,
Oppgaveprodusent oppgaveprodusent,
Varselprodusent varselprodusent,
FarskapsportalFellesEgenskaper farskapsportalFellesEgenskaper)
throws MalformedURLException {
this.beskjedprodusent = beskjedprodusent;
this.ferdigprodusent = ferdigprodusent;
this.oppgaveprodusent = oppgaveprodusent;
this.varselprodusent = varselprodusent;
this.farskapsportalFellesEgenskaper = farskapsportalFellesEgenskaper;
}

Expand Down Expand Up @@ -112,8 +112,7 @@ public void varsleOmAvbruttSignering(Forelder mor, Forelder far) {

public void oppretteOppgaveTilFarOmSignering(int idFarskapserklaering, Forelder far) {
try {
oppgaveprodusent.oppretteOppgaveForSigneringAvFarskapserklaering(
idFarskapserklaering, far, MELDING_OM_VENTENDE_FARSKAPSERKLAERING, true);
varselprodusent.oppretteOppgaveForSigneringAvFarskapserklaering(idFarskapserklaering, far);
} catch (InternFeilException internFeilException) {
log.error(
"En feil inntraff ved opprettelse av oppgave til far for farskapserklæring med id {}",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,36 @@
package no.nav.farskapsportal.backend.libs.felles.consumer.brukernotifikasjon;

import static no.nav.farskapsportal.backend.libs.felles.config.BrukernotifikasjonConfig.NAMESPACE_FARSKAPSPORTAL;
import static no.nav.farskapsportal.backend.libs.felles.consumer.brukernotifikasjon.BrukernotifikasjonConsumer.MELDING_OM_VENTENDE_FARSKAPSERKLAERING;

import java.net.URL;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import no.nav.brukernotifikasjon.schemas.builders.NokkelInputBuilder;
import no.nav.brukernotifikasjon.schemas.builders.OppgaveInputBuilder;
import no.nav.brukernotifikasjon.schemas.input.NokkelInput;
import no.nav.brukernotifikasjon.schemas.input.OppgaveInput;
import no.nav.farskapsportal.backend.libs.entity.Forelder;
import no.nav.farskapsportal.backend.libs.felles.config.egenskaper.FarskapsportalFellesEgenskaper;
import no.nav.farskapsportal.backend.libs.felles.exception.Feilkode;
import no.nav.farskapsportal.backend.libs.felles.exception.InternFeilException;
import no.nav.farskapsportal.backend.libs.felles.service.PersistenceService;
import no.nav.tms.varsel.action.Sensitivitet;
import no.nav.tms.varsel.action.Varseltype;
import no.nav.tms.varsel.builder.OpprettVarselBuilder;
import org.springframework.kafka.core.KafkaTemplate;

@Slf4j
@AllArgsConstructor
public class Oppgaveprodusent {

private KafkaTemplate kafkaTemplate;
public class Varselprodusent {
private KafkaTemplate<String, String> kafkaTemplate;
private PersistenceService persistenceService;
private URL farskapsportalUrl;
private FarskapsportalFellesEgenskaper farskapsportalFellesEgenskaper;

public void oppretteOppgaveForSigneringAvFarskapserklaering(
int idFarskapserklaering, Forelder far, String oppgavetekst, boolean medEksternVarsling) {
int idFarskapserklaering, Forelder far) {

var nokkel =
new NokkelInputBuilder()
.withEventId(UUID.randomUUID().toString())
.withGrupperingsId(
farskapsportalFellesEgenskaper.getBrukernotifikasjon().getGrupperingsidFarskap())
.withFodselsnummer(far.getFoedselsnummer())
.withAppnavn(farskapsportalFellesEgenskaper.getAppnavn())
.withNamespace(NAMESPACE_FARSKAPSPORTAL)
.build();
var melding = oppretteOppgave(oppgavetekst, medEksternVarsling, farskapsportalUrl);
var varselid = UUID.randomUUID().toString();

var farsAktiveSigneringsoppgaver =
persistenceService.henteAktiveOppgaverTilForelderIFarskapserklaering(
Expand All @@ -50,41 +40,43 @@ public void oppretteOppgaveForSigneringAvFarskapserklaering(
log.info(
"Oppretter oppgave om signering til far i farskapserklæring med id {}",
idFarskapserklaering);
oppretteOppgave(nokkel, melding);
oppretteOppgave(varselid, oppretteVarselForOppgave(varselid, far.getFoedselsnummer()));
log.info("Signeringsppgave opprettet for far med id {}.", far.getId());
persistenceService.lagreNyOppgavebestilling(idFarskapserklaering, nokkel.getEventId());
persistenceService.lagreNyOppgavebestilling(idFarskapserklaering, varselid);
}
}

private void oppretteOppgave(NokkelInput nokkel, OppgaveInput melding) {
private void oppretteOppgave(String varselid, String melding) {
try {
kafkaTemplate.send(
farskapsportalFellesEgenskaper.getBrukernotifikasjon().getTopicOppgave(),
nokkel,
varselid,
melding);
} catch (Exception e) {
e.printStackTrace();
throw new InternFeilException(Feilkode.BRUKERNOTIFIKASJON_OPPRETTE_OPPGAVE, e);
}
}

private OppgaveInput oppretteOppgave(
String oppgavetekst, boolean medEksternVarsling, URL farskapsportalUrl) {

return new OppgaveInputBuilder()
.withTidspunkt(ZonedDateTime.now(ZoneId.of("UTC")).toLocalDateTime())
.withEksternVarsling(medEksternVarsling)
.withLink(farskapsportalUrl)
.withSikkerhetsnivaa(
farskapsportalFellesEgenskaper.getBrukernotifikasjon().getSikkerhetsnivaaOppgave())
.withSynligFremTil(
private String oppretteVarselForOppgave(String varselid, String personident) {
return OpprettVarselBuilder.newInstance()
.withType(Varseltype.Oppgave)
.withVarselId(varselid)
.withIdent(personident)
.withSensitivitet(Sensitivitet.High)
.withAktivFremTil(
ZonedDateTime.now(ZoneId.of("UTC"))
.plusDays(
farskapsportalFellesEgenskaper
.getBrukernotifikasjon()
.getLevetidOppgaveAntallDager())
.toLocalDateTime())
.withTekst(oppgavetekst)
.getLevetidOppgaveAntallDager()))
// Vurdere å angi prioritering av kanal og spesifisering av tekst for SMS og epost
.withEksternVarsling()
.withLink(farskapsportalUrl.toString())
.withTekst("nb", MELDING_OM_VENTENDE_FARSKAPSERKLAERING)
.withProdusent(
farskapsportalFellesEgenskaper.getNaisClusternavn(),
NAMESPACE_FARSKAPSPORTAL,
farskapsportalFellesEgenskaper.getAppnavn())
.build();
}
}
2 changes: 1 addition & 1 deletion libs/felles/src/main/resources/felles-application.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
farskapsportal.felles.egenskaper:
appnavn: ${APPNAVN}
nais_clusternavn: ${NAIS_CLUSTER_NAME}
maks-antall-maaneder-etter-foedsel: 6
kontroll-far-maks-antall-forsoek: 3
url: ${FARSKAPSPORTAL_URL}
Expand All @@ -12,7 +13,6 @@ farskapsportal.felles.egenskaper:
synlighet-beskjed-antall-maaneder: 1
levetid-oppgave-antall-dager: 40
sikkerhetsnivaa-beskjed: 3
sikkerhetsnivaa-oppgave: 3
bucket:
pades-name: ${APPNAVN}-pades
xades-name: ${APPNAVN}-xades
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import no.nav.farskapsportal.backend.libs.felles.persistence.dao.OppgavebestillingDao;
import no.nav.farskapsportal.backend.libs.felles.service.PersistenceService;
import no.nav.farskapsportal.backend.libs.felles.test.utils.TestUtils;
import no.nav.tms.varsel.action.Sensitivitet;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
Expand Down Expand Up @@ -547,10 +548,7 @@ void skalOppretteOppgaveTilFarOmSignering() {
.getGrupperingsidFarskap()),
() ->
assertThat(oppgave.getSikkerhetsnivaa())
.isEqualTo(
farskapsportalFellesEgenskaper
.getBrukernotifikasjon()
.getSikkerhetsnivaaOppgave()),
.isEqualTo(Sensitivitet.High),
() ->
assertThat(oppgave.getTidspunkt())
.isBetween(
Expand Down
Loading

0 comments on commit 839dc17

Please sign in to comment.