Skip to content

Commit

Permalink
**Improve error handling and add entity equality methods**
Browse files Browse the repository at this point in the history
#deploy-test-frontend #deploy-levende-arbeidsforhold-ansettelse #deploy-levenede-arbeidsforhold-scheduler

Enhanced error handling in ParameterController by removing try-catch and ensuring HTTP OK status. Added equals and hashCode methods to AnsettelseLogg and JobbParameter for better entity management and comparison.
  • Loading branch information
krharum committed Aug 15, 2024
1 parent 3a86e28 commit 4880aee
Show file tree
Hide file tree
Showing 8 changed files with 143 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,16 @@ public class ParameterController {
*/
@GetMapping
@Operation(description = "Henter alle parametre for oppretting av arbeidsforhold")
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<List<JobbParameter>> hentAlleParametere() {
try {

return ResponseEntity.ok(parameterService.hentAlleParametere());
}
catch (Exception e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}

/**
* Endepunktet frontenden bruker for å opdatere gjeldende verdi i jobb_parameter db.
* @param parameternavn navnet på parameteren som skal bli oppdatert
* @param verdi ER den nye verdien som skal bli oppdatert
* @return Enten den nye jobbParameterEntity eller feilmeldingen.
*/
@PutMapping("/{parameternavn}")
@Operation(description = "Legg inn ny verdi på en parameter")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
package no.nav.registre.testnorge.levendearbeidsforholdansettelse.entity;

import jakarta.persistence.*;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

import java.math.BigDecimal;
import java.time.LocalDate;
Expand Down Expand Up @@ -33,7 +43,6 @@ public class AnsettelseLogg {
@Column(name = "folkeregisterident", nullable = false)
private String folkeregisterident;


@NotNull
@Column(name = "\"timestamp\"", nullable = false)
private OffsetDateTime timestamp;
Expand All @@ -49,4 +58,17 @@ public class AnsettelseLogg {
@Column(name = "stillingsprosent")
private BigDecimal stillingsprosent;

@Override
public boolean equals(Object o) {
if (this == o) return true;

if (!(o instanceof AnsettelseLogg that)) return false;

return new EqualsBuilder().append(getId(), that.getId()).append(getOrganisasjonsnummer(), that.getOrganisasjonsnummer()).append(getFolkeregisterident(), that.getFolkeregisterident()).append(getTimestamp(), that.getTimestamp()).append(getAnsattfra(), that.getAnsattfra()).append(getArbeidsforholdType(), that.getArbeidsforholdType()).append(getStillingsprosent(), that.getStillingsprosent()).isEquals();
}

@Override
public int hashCode() {
return new HashCodeBuilder(17, 37).append(getId()).append(getOrganisasjonsnummer()).append(getFolkeregisterident()).append(getTimestamp()).append(getAnsattfra()).append(getArbeidsforholdType()).append(getStillingsprosent()).toHashCode();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;

import java.util.List;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

@Getter
@Setter
Expand All @@ -32,5 +32,19 @@ public class JobbParameter {
private String verdi;

@Column(name = "verdier")
private List<String> verdier;
private String verdier;

@Override
public boolean equals(Object o) {
if (this == o) return true;

if (!(o instanceof JobbParameter that)) return false;

return new EqualsBuilder().append(getNavn(), that.getNavn()).append(getTekst(), that.getTekst()).append(getVerdi(), that.getVerdi()).append(getVerdier(), that.getVerdier()).isEquals();
}

@Override
public int hashCode() {
return new HashCodeBuilder(17, 37).append(getNavn()).append(getTekst()).append(getVerdi()).append(getVerdier()).toHashCode();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package no.nav.registre.testnorge.levendearbeidsforholdansettelse.entity;

import lombok.Getter;

public enum JobbParameterNavn {
ANTALL_ORGANISASJONER ("antallOrganisasjoner"),
ANTALL_PERSONER ("antallPersoner"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
@Slf4j
@Service
@RequiredArgsConstructor
public class AnsettelseService {
public class AnsettelseService {

private final PdlService pdlService;
private final TenorService tenorService;
Expand Down Expand Up @@ -90,84 +90,84 @@ public void ansettelseService() {
int finalAntallPersPerOrg = antallPersPerOrg;
//Kjører ansettelse per org
organisasjoner.forEach(
organisasjon -> {
if (tenorService.hentOrgPostnummer(organisasjon.getOrganisasjonsnummer()) == null) {
organisasjon = hentOrganisasjoner(1).getFirst();
}
String postnr = konverterPostnr(tenorService.hentOrgPostnummer(organisasjon.getOrganisasjonsnummer()));
organisasjon -> {
if (tenorService.hentOrgPostnummer(organisasjon.getOrganisasjonsnummer()) == null) {
organisasjon = hentOrganisasjoner(1).getFirst();
}
String postnr = konverterPostnr(tenorService.hentOrgPostnummer(organisasjon.getOrganisasjonsnummer()));

//Trekker alderspenn fra alias for hver pers som skal ansettes
List<Integer> aldersspennIndekser = new ArrayList<>();
for (int i = 0; i < finalAntallPersPerOrg; i++) {
aldersspennIndekser.add(alias.aliasDraw());
}
//Trekker alderspenn fra alias for hver pers som skal ansettes
List<Integer> aldersspennIndekser = new ArrayList<>();
for (int i = 0; i < finalAntallPersPerOrg; i++) {
aldersspennIndekser.add(alias.aliasDraw());
}

Iterator<Integer> aldersspennIterator = aldersspennIndekser.iterator();
int iteratorElement = aldersspennIterator.next();
Iterator<Integer> aldersspennIterator = aldersspennIndekser.iterator();
int iteratorElement = aldersspennIterator.next();

//Henter mulige personer per alderspenn basert på postnummer fra org
Map<Integer, List<Ident>> muligePersonerMap = new HashMap<>();
aldersspennIndekser.forEach(
indeks -> {
if (!muligePersonerMap.containsKey(indeks)) {
muligePersonerMap.put(indeks, hentPersoner(datoIntervaller.get(indeks).getFrom().toString(), datoIntervaller.get(indeks).getTom().toString(), postnr));
}
});
//Henter mulige personer per alderspenn basert på postnummer fra org
Map<Integer, List<Ident>> muligePersonerMap = new HashMap<>();
aldersspennIndekser.forEach(
indeks -> {
if (!muligePersonerMap.containsKey(indeks)) {
muligePersonerMap.put(indeks, hentPersoner(datoIntervaller.get(indeks).getFrom().toString(), datoIntervaller.get(indeks).getTom().toString(), postnr));
}
});

List<Ident> ansattePersoner = new ArrayList<>();
List<Ident> ansattePersoner = new ArrayList<>();

//Ansetter personer
while (ansattePersoner.size() < finalAntallPersPerOrg) {
try {
List<Ident> muligePersoner = muligePersonerMap.get(iteratorElement);
//Ansetter personer
while (ansattePersoner.size() < finalAntallPersPerOrg) {
try {
List<Ident> muligePersoner = muligePersonerMap.get(iteratorElement);

var tilfeldigIndex = tilfeldigTall(muligePersoner.size());
var tilfeldigPerson = muligePersoner.get(tilfeldigIndex);
var tilfeldigIndex = tilfeldigTall(muligePersoner.size());
var tilfeldigPerson = muligePersoner.get(tilfeldigIndex);

var stillingsprosent = Double.parseDouble(parametere.get(STILLINGSPROSENT.value));
var arbeidsforholdList = arbeidsforholdService.hentArbeidsforhold(tilfeldigPerson.getIdent());
var stillingsprosent = Double.parseDouble(parametere.get(STILLINGSPROSENT.value));
var arbeidsforholdList = arbeidsforholdService.hentArbeidsforhold(tilfeldigPerson.getIdent());

if(kanAnsettes(stillingsprosent, arbeidsforholdList) ) {
var tilfeldigYrke = hentTilfeldigYrkeskode(yrkeskoder);
if (kanAnsettes(stillingsprosent, arbeidsforholdList)) {
var tilfeldigYrke = hentTilfeldigYrkeskode(yrkeskoder);

//Try-catch fordi vi møtte på problemer der noen org ikke fikk suksessfulle ansettelser
try {
var ansettSporring = ansettPerson(tilfeldigPerson.getIdent(),
organisasjon.getOrganisasjonsnummer(),
tilfeldigYrke,
parametere.get(JobbParameterNavn.STILLINGSPROSENT.value));
if (ansettSporring.isPresent() && ansettSporring.get().is2xxSuccessful()) {
ansattePersoner.add(tilfeldigPerson);
//Try-catch fordi vi møtte på problemer der noen org ikke fikk suksessfulle ansettelser
try {
var ansettSporring = ansettPerson(tilfeldigPerson.getIdent(),
organisasjon.getOrganisasjonsnummer(),
tilfeldigYrke,
parametere.get(JobbParameterNavn.STILLINGSPROSENT.value));
if (ansettSporring.isPresent() && ansettSporring.get().is2xxSuccessful()) {
ansattePersoner.add(tilfeldigPerson);

if (aldersspennIterator.hasNext()) {
iteratorElement = aldersspennIterator.next();
if (aldersspennIterator.hasNext()) {
iteratorElement = aldersspennIterator.next();
}
}
} catch (WebClientResponseException e) {
log.error(e.toString());
//Løsningen var å hente en ny tilfeldig organisasjon, da ingen personer fikk
//vellykket ansettelse uansett hvor mange vi prøvde å hente
organisasjon = hentOrganisasjoner(1).getFirst();
continue;
}
}catch (WebClientResponseException e){
log.error(e.toString());
//Løsningen var å hente en ny tilfeldig organisasjon, da ingen personer fikk
//vellykket ansettelse uansett hvor mange vi prøvde å hente
organisasjon = hentOrganisasjoner(1).getFirst();
continue;
}
muligePersoner.remove(tilfeldigIndex);

} catch (NullPointerException e) {
log.error(e.toString());
//Henter ny liste med mulige personer dersom den forrige blir tom uten at man fikk ansatt nok
muligePersonerMap.replace(iteratorElement, hentPersoner(datoIntervaller.get(iteratorElement).getFrom().toString(),
datoIntervaller.get(iteratorElement).getTom().toString(), postnr));
} catch (Exception e) {
log.error(e.toString());
break;
}
muligePersoner.remove(tilfeldigIndex);

} catch (NullPointerException e) {
log.error(e.toString());
//Henter ny liste med mulige personer dersom den forrige blir tom uten at man fikk ansatt nok
muligePersonerMap.replace(iteratorElement, hentPersoner(datoIntervaller.get(iteratorElement).getFrom().toString(),
datoIntervaller.get(iteratorElement).getTom().toString(), postnr));
} catch (Exception e) {
log.error(e.toString());
break;
}
//Logging til db
for (Ident person : ansattePersoner) {
ansettelseLoggService.lagreAnsettelse(person, organisasjon, Double.parseDouble(parametere.get(STILLINGSPROSENT.value)), parametere.get(ARBEIDSFORHOLD_TYPE.value));
}
}
//Logging til db
for (Ident person: ansattePersoner){
ansettelseLoggService.lagreAnsettelse(person, organisasjon, Double.parseDouble(parametere.get(STILLINGSPROSENT.value)), parametere.get(ARBEIDSFORHOLD_TYPE.value));
}
}
);
}

Expand Down Expand Up @@ -203,7 +203,7 @@ private Optional<HttpStatusCode> ansettPerson(String ident, String orgnummer, St

private int getAntallAnsettelserHverOrg(int antallPers, int antallOrg) {
//Kan implementere mer tilfeldig fordelig, foreløpig får alle organisasjonene like mange folk
return antallPers/antallOrg;
return antallPers / antallOrg;
}

private int tilfeldigTall(int max) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,16 @@
@Service
@RequiredArgsConstructor
public class ArbeidsforholdService {
private final AaregConsumer aaregConsumer;
private final String arbeidstakerType = "Person";
private final String arbeidsgiverType = "Organisasjon";
private final String arbeidsforholdType = "ordinaertArbeidsforhold"; //#TODO KAN BLI HENTET FRA DB
private final String arbeidstidsordning = "ikkeSkift";
private final String ansettelsesform = "fast";
private final double TIMER_HUNDRE_PROSENT = 37.5;
private final int HUNDRE_PROSENT = 100;

private static final String arbeidstakerType = "Person";
private static final String arbeidsgiverType = "Organisasjon";
private static final String arbeidsforholdType = "ordinaertArbeidsforhold"; //#TODO KAN BLI HENTET FRA DB
private static final String arbeidstidsordning = "ikkeSkift";
private static final String ansettelsesform = "fast";
private static final double TIMER_HUNDRE_PROSENT = 37.5;
private static final int HUNDRE_PROSENT = 100;

private final AaregConsumer aaregConsumer;

/**
* @param ident Identnummeret til personen det skal hentes arbeidsforhold for
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ public Map<String, String> hentParametere() {
* Funksjon for å oppdatere en verdi i db.
* @param parameternavn Objektet som skal oppdateres i
* @param verdi ny verdi for parameter
* @return
*/

@Transactional
Expand Down
Loading

0 comments on commit 4880aee

Please sign in to comment.