Skip to content

Commit

Permalink
Publiserer ForelderBarnRelasjon hendelser ved fødselshendelser.
Browse files Browse the repository at this point in the history
  • Loading branch information
ramrock93 committed Jan 24, 2025
1 parent e374ff2 commit c1e72b1
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package no.nav.foreldrepenger.vtp.kontrakter;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(name = "FamilierelasjonHendelseDto")
@JsonIgnoreProperties(ignoreUnknown = true)
public record ForelderBarnRelasjonHendelseDto(@Schema String endringstype,
@Schema String fnr,
@Schema String relatertPersonsFnr,
@Schema String relatertPersonsRolle,
@Schema String minRolleForPerson) implements PersonhendelseDto {

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
Expand All @@ -26,6 +27,7 @@
import no.nav.foreldrepenger.vtp.kontrakter.DødfødselhendelseDto;
import no.nav.foreldrepenger.vtp.kontrakter.DødshendelseDto;
import no.nav.foreldrepenger.vtp.kontrakter.FamilierelasjonHendelseDto;
import no.nav.foreldrepenger.vtp.kontrakter.ForelderBarnRelasjonHendelseDto;
import no.nav.foreldrepenger.vtp.kontrakter.FødselshendelseDto;
import no.nav.foreldrepenger.vtp.kontrakter.PersonhendelseDto;
import no.nav.foreldrepenger.vtp.testmodell.personopplysning.BarnModell;
Expand All @@ -39,6 +41,7 @@
import no.nav.person.pdl.leesah.doedsfall.Doedsfall;
import no.nav.person.pdl.leesah.familierelasjon.Familierelasjon;
import no.nav.person.pdl.leesah.foedselsdato.Foedselsdato;
import no.nav.person.pdl.leesah.forelderbarnrelasjon.ForelderBarnRelasjon;

@Tag(name = "Legge hendelser på PDL topic")
@Path("/api/pdl/leesah")
Expand Down Expand Up @@ -74,16 +77,15 @@ public PdlLeesahRestTjeneste(TestscenarioRepository testscenarioRepository) {
@Operation(description = "Legg til hendelse")
public Response leggTilHendelse(PersonhendelseDto personhendelseDto) {
try {
if (personhendelseDto instanceof FødselshendelseDto fødselshendelseDto) {
produserFødselshendelse(fødselshendelseDto);
} else if (personhendelseDto instanceof DødshendelseDto dødshendelseDto) {
produserDødshendelse(dødshendelseDto);
} else if (personhendelseDto instanceof DødfødselhendelseDto dødfødselhendelseDto) {
produserDødfødselshendelse(dødfødselhendelseDto);
} else if (personhendelseDto instanceof FamilierelasjonHendelseDto familierelasjonHendelseDto) {
produserFamilierelasjonHendelse(familierelasjonHendelseDto);
} else {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\": \"Ukjent hendelsestype\"}").build();
switch (personhendelseDto) {
case FødselshendelseDto fødselshendelseDto -> produserFødselshendelse(fødselshendelseDto);
case DødshendelseDto dødshendelseDto -> produserDødshendelse(dødshendelseDto);
case DødfødselhendelseDto dødfødselhendelseDto -> produserDødfødselshendelse(dødfødselhendelseDto);
case FamilierelasjonHendelseDto familierelasjonHendelseDto -> produserFamilierelasjonHendelse(familierelasjonHendelseDto);
case ForelderBarnRelasjonHendelseDto forelderBarnRelasjonHendelseDto -> produserForelderBarnRelasjonHendelse(forelderBarnRelasjonHendelseDto);
case null, default -> {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\": \"Ukjent hendelsestype\"}").build();
}
}

} catch (RuntimeException e) {
Expand All @@ -93,6 +95,38 @@ public Response leggTilHendelse(PersonhendelseDto personhendelseDto) {
return Response.status(201).entity("{\"success\": \"Personhendelse opprettet\"}").build();
}

private void produserForelderBarnRelasjonHendelse(ForelderBarnRelasjonHendelseDto forelderBarnRelasjonHendelseDto) {
if (forelderBarnRelasjonHendelseDto == null) {
LOG.warn("ForelderBarnRelasjonHendelseDto er null, kan ikke produsere hendelse");
return;
}

GenericRecordBuilder personhendelse = new GenericRecordBuilder(Personhendelse.SCHEMA$);

personhendelse.set(HENDELSE_ID, UUID.randomUUID().toString());
personhendelse.set(MASTER_FIELD, "Freg");
personhendelse.set(OPPRETTET, LocalDateTime.now().atZone(ZoneId.systemDefault()).toEpochSecond() * 1000);
personhendelse.set(OPPLYSNINGSTYPE, "FORELDERBARNRELASJON_V1");
personhendelse.set(ENDRINGSTYPE, Endringstype.valueOf(forelderBarnRelasjonHendelseDto.endringstype()));

String fnr = forelderBarnRelasjonHendelseDto.fnr();
personhendelse.set(PERSONIDENTER, List.of(fnr, testscenarioRepository.getPersonIndeks().finnByIdent(fnr).getAktørIdent()));

if (!Endringstype.ANNULLERT.toString().equals(forelderBarnRelasjonHendelseDto.endringstype())) {
GenericRecordBuilder forelderBarnRelasjon = new GenericRecordBuilder(ForelderBarnRelasjon.SCHEMA$);
String relatertPersonsFnr = forelderBarnRelasjonHendelseDto.relatertPersonsFnr();
forelderBarnRelasjon.set("relatertPersonsIdent", relatertPersonsFnr);
forelderBarnRelasjon.set("relatertPersonsRolle", forelderBarnRelasjonHendelseDto.relatertPersonsRolle());
forelderBarnRelasjon.set("minRolleForPerson", forelderBarnRelasjonHendelseDto.minRolleForPerson());
personhendelse.set("forelderBarnRelasjon", forelderBarnRelasjon.build());
}

LOG.info("Publiserer FORELDERBARNRELASJON_V1 hendelse med minRolle: {}, minFnr: {}, relatertPersonRolle: {}, relatertPersonFnr: {}",
forelderBarnRelasjonHendelseDto.minRolleForPerson(), forelderBarnRelasjonHendelseDto.fnr(),
forelderBarnRelasjonHendelseDto.relatertPersonsRolle(), forelderBarnRelasjonHendelseDto.relatertPersonsFnr());

Check failure

Code scanning / CodeQL

Log Injection High

This log entry depends on a
user-provided value
.
sendHendelsePåKafka(personhendelse.build());
}

private void produserFødselshendelse(FødselshendelseDto fødselshendelseDto) {
var barnIdent = registererNyttBarnPåForeldre(fødselshendelseDto);
GenericRecordBuilder personhendelse = new GenericRecordBuilder(Personhendelse.SCHEMA$);
Expand All @@ -113,9 +147,36 @@ public Response leggTilHendelse(PersonhendelseDto personhendelseDto) {
personhendelse.set("foedselsdato", fødselsdato.build());
}

LOG.info("Publiserer FOEDSELSDATO_V1 på kafka for barn med ident {}, født: {}", barnIdent, fødselshendelseDto.fødselsdato());

Check failure

Code scanning / CodeQL

Log Injection High

This log entry depends on a
user-provided value
.
sendHendelsePåKafka(personhendelse.build());

produserForelderBarnRelasjon(fødselshendelseDto, barnIdent);
}

private void produserForelderBarnRelasjon(FødselshendelseDto fødselshendelseDto, String barnIdent) {
List<ForelderBarnRelasjonHendelseDto> forelderBarnRelasjonHendelseDtos = new ArrayList<>();
if (fødselshendelseDto.fnrMor() != null) {
// Legg til relasjoner for mor
leggTilForelderBarnRelasjon(forelderBarnRelasjonHendelseDtos, fødselshendelseDto.endringstype(),
fødselshendelseDto.fnrMor(), barnIdent);
} else if (fødselshendelseDto.fnrFar() != null) {
// Legg til relasjoner for far
leggTilForelderBarnRelasjon(forelderBarnRelasjonHendelseDtos, fødselshendelseDto.endringstype(),
fødselshendelseDto.fnrFar(), barnIdent);
}

forelderBarnRelasjonHendelseDtos.forEach(this::produserForelderBarnRelasjonHendelse);
}

private void leggTilForelderBarnRelasjon(List<ForelderBarnRelasjonHendelseDto> dtos,
String endringstype,
String forelderFnr,
String barnFnr) {
dtos.add(new ForelderBarnRelasjonHendelseDto(endringstype, forelderFnr, barnFnr, "BARN", "MOR"));
dtos.add(new ForelderBarnRelasjonHendelseDto(endringstype, barnFnr, forelderFnr, "MOR", "BARN"));
}


public void sendHendelsePåKafka(GenericData.Record rekord) {
localKafkaProducer.sendMelding(LEESAH_TOPIC, rekord);
}
Expand All @@ -140,6 +201,7 @@ public Response leggTilHendelse(PersonhendelseDto personhendelseDto) {
personhendelse.set("doedsfall", dødsfall.build());
}

LOG.info("Publiserer DOEDSFALL_V1 hendelse på kafka for person med ident {}, dødsdato: {}", dødshendelseDto.fnr(), dødshendelseDto.doedsdato());
sendHendelsePåKafka(personhendelse.build());
}

Expand All @@ -163,6 +225,7 @@ public Response leggTilHendelse(PersonhendelseDto personhendelseDto) {
personhendelse.set("doedfoedtBarn", dødfødtBarn.build());
}

LOG.info("Publiserer DOEDFOEDT_BARN_V1 hendelse på kafka for barn med ident {}, dødsdato: {}", dødfødselhendelseDto.fnr(), dødfødselhendelseDto.doedfoedselsdato());
sendHendelsePåKafka(personhendelse.build());
}

Expand All @@ -184,6 +247,9 @@ private void produserFamilierelasjonHendelse(FamilierelasjonHendelseDto familier
personhendelse.set("familierelasjon", familierelasjon.build());
}

LOG.info("Publiserer FAMILIERELASJON_V1 hendelse med minRolle: {}, minFnr: {}, relatertPersonRolle: {}, relatertPersonFnr: {}",
familierelasjonHendelseDto.minRolleForPerson(), familierelasjonHendelseDto.fnr(),
familierelasjonHendelseDto.relatertPersonsRolle(), familierelasjonHendelseDto.relatertPersonsFnr());
sendHendelsePåKafka(personhendelse.build());
}

Expand Down Expand Up @@ -226,7 +292,7 @@ private int oversettLocalDateTilAvroFormat(LocalDate localDate) {
setDødsdatoerIIndeksene(personopplysninger, dødshendelseDto);
}

private void setDødsdatoerIIndeksene(Personopplysninger personopplysninger, DødshendelseDto dødshendelseDto){
private void setDødsdatoerIIndeksene(Personopplysninger personopplysninger, DødshendelseDto dødshendelseDto) {
if (dødshendelseDto.fnr().equalsIgnoreCase(personopplysninger.getSøker().getIdent())) {
personopplysninger.getSøker().setDødsdato(dødshendelseDto.doedsdato());
} else if (dødshendelseDto.fnr().equalsIgnoreCase(personopplysninger.getAnnenPart().getIdent())) {
Expand Down
2 changes: 2 additions & 0 deletions server/src/main/resources/avro/leesah/Personhendelse.avdl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ protocol PersonhendelseProto {
import idl "foedsel/Foedsel.avdl";
import idl "foedselsdato/Foedselsdato.avdl";
import idl "familierelasjon/Familierelasjon.avdl";
import idl "forelderbarnrelasjon/ForelderBarnRelasjon.avdl";

enum Endringstype {
OPPRETTET,
Expand All @@ -29,5 +30,6 @@ protocol PersonhendelseProto {
union { null, no.nav.person.pdl.leesah.foedsel.Foedsel } foedsel = null;
union { null, no.nav.person.pdl.leesah.foedselsdato.Foedselsdato } foedselsdato = null;
union { null, no.nav.person.pdl.leesah.familierelasjon.Familierelasjon } familierelasjon = null;
union { null, no.nav.person.pdl.leesah.forelderbarnrelasjon.ForelderBarnRelasjon } forelderBarnRelasjon = null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/*https://github.com/navikt/pdl/blob/master/libs/contract-pdl-avro/src/main/avro/no/nav/person/pdl/leesah/forelderbarnrelasjon/ForelderBarnRelasjon.avdl*/

@namespace("no.nav.person.pdl.leesah.forelderbarnrelasjon")
protocol ForelderBarnRelasjonV1 {

record ForelderBarnRelasjon {
union { null, string } relatertPersonsIdent = null;
string relatertPersonsRolle;
union { null, string } minRolleForPerson = null;
}
}

0 comments on commit c1e72b1

Please sign in to comment.