Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrere til ny løsning for brukernotifikasjoner (varsler) #848

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading