Skip to content

Commit

Permalink
Move resource validation and requests to mappers, to validate body be…
Browse files Browse the repository at this point in the history
…fore mapping (#13)

* Move resource validation and requests to mappers, to validate before mapping

* Change validation of table name from not null to not blank
  • Loading branch information
eivindmorch authored Apr 11, 2023
1 parent 0a650a9 commit 51bd279
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 138 deletions.
47 changes: 16 additions & 31 deletions src/main/java/no/fintlabs/EgrunnervervInstanceController.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package no.fintlabs;

import no.fintlabs.exceptions.ArchiveCaseNotFoundException;
import no.fintlabs.exceptions.ArchiveResourceNotFoundException;
import no.fintlabs.gateway.instance.InstanceProcessor;
import no.fintlabs.gateway.instance.kafka.ArchiveCaseRequestService;
import no.fintlabs.models.*;
import no.fintlabs.models.EgrunnervervJournalpostInstance;
import no.fintlabs.models.EgrunnervervJournalpostInstanceBody;
import no.fintlabs.models.EgrunnervervSakInstance;
import no.fintlabs.models.EgrunnervervSimpleInstance;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand All @@ -20,49 +20,36 @@ public class EgrunnervervInstanceController {

private final InstanceProcessor<EgrunnervervSakInstance> sakInstanceProcessor;
private final InstanceProcessor<EgrunnervervJournalpostInstance> journalpostInstanceProcessor;
private final ArchiveCaseRequestService archiveCaseRequestService;
private final ResourceRepository resourceRepository;
private final EgrunnervervSimpleInstanceProducerService egrunnervervSimpleInstanceProducerService;


public EgrunnervervInstanceController(
InstanceProcessor<EgrunnervervSakInstance> sakInstanceProcessor,
InstanceProcessor<EgrunnervervJournalpostInstance> journalpostInstanceProcessor,
ArchiveCaseRequestService archiveCaseRequestService,
ResourceRepository resourceRepository,
EgrunnervervSimpleInstanceProducerService egrunnervervSimpleInstanceProducerService
) {
this.sakInstanceProcessor = sakInstanceProcessor;
this.journalpostInstanceProcessor = journalpostInstanceProcessor;
this.archiveCaseRequestService = archiveCaseRequestService;
this.resourceRepository = resourceRepository;
this.egrunnervervSimpleInstanceProducerService = egrunnervervSimpleInstanceProducerService;
}


@PostMapping("archive")
public Mono<ResponseEntity<?>> postSakInstance(
@RequestBody EgrunnervervSakInstanceDto egrunnervervSakInstanceDto,
@RequestBody EgrunnervervSakInstance egrunnervervSakInstance,
@AuthenticationPrincipal Mono<Authentication> authenticationMono
) {

String saksansvarlig = resourceRepository.getSaksansvarligHref(egrunnervervSakInstanceDto.getSaksansvarligEpost())
.orElseThrow(() -> new ArchiveResourceNotFoundException(egrunnervervSakInstanceDto.getSaksansvarligEpost()));

return authenticationMono.flatMap(
authentication -> sakInstanceProcessor.processInstance(
authentication,
EgrunnervervSakInstance.builder()
.egrunnervervSakInstanceDto(egrunnervervSakInstanceDto)
.saksansvarlig(saksansvarlig)
.build()
egrunnervervSakInstance
)
.doOnNext(responseEntity -> {
if (responseEntity.getStatusCode().is2xxSuccessful()) {
egrunnervervSimpleInstanceProducerService.publishSimpleSakInstance(
EgrunnervervSimpleInstance.builder()
.sysId(egrunnervervSakInstanceDto.getSysId())
.tableName(egrunnervervSakInstanceDto.getTable())
.sysId(egrunnervervSakInstance.getSysId())
.tableName(egrunnervervSakInstance.getTable())
.build()
);
}
Expand All @@ -72,27 +59,25 @@ public Mono<ResponseEntity<?>> postSakInstance(

@PostMapping("document")
public Mono<ResponseEntity<?>> postJournalpostInstance(
@RequestBody EgrunnervervJournalpostInstanceDto egrunnervervJournalpostInstanceDto,
@RequestBody EgrunnervervJournalpostInstanceBody egrunnervervJournalpostInstanceBody,
@RequestParam("id") String saksnummer,
@AuthenticationPrincipal Mono<Authentication> authenticationMono
) {

archiveCaseRequestService.getByArchiveCaseId(saksnummer)
.orElseThrow(() -> new ArchiveCaseNotFoundException(saksnummer));
EgrunnervervJournalpostInstance egrunnervervJournalpostInstance = EgrunnervervJournalpostInstance.builder()
.egrunnervervJournalpostInstanceBody(egrunnervervJournalpostInstanceBody)
.saksnummer(saksnummer)
.build();

return authenticationMono.flatMap(
authentication -> journalpostInstanceProcessor.processInstance(
authentication,
EgrunnervervJournalpostInstance.builder()
.egrunnervervJournalpostInstanceDto(egrunnervervJournalpostInstanceDto)
.saksnummer(saksnummer)
.build()
egrunnervervJournalpostInstance
).doOnNext(responseEntity -> {
if (responseEntity.getStatusCode().is2xxSuccessful()) {
egrunnervervSimpleInstanceProducerService.publishSimpleJournalpostInstance(
EgrunnervervSimpleInstance.builder()
.sysId(egrunnervervJournalpostInstanceDto.getSysId())
.tableName(egrunnervervJournalpostInstanceDto.getTable())
.sysId(egrunnervervJournalpostInstanceBody.getSysId())
.tableName(egrunnervervJournalpostInstanceBody.getTable())
.build()
);
}
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/no/fintlabs/InstanceProcessorConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public InstanceProcessor<EgrunnervervSakInstance> sakInstanceProcessor(
) {
return instanceProcessorFactoryService.createInstanceProcessor(
"sak",
egrunnervervSakInstance -> Optional.ofNullable(egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getSysId()),
egrunnervervSakInstance -> Optional.ofNullable(egrunnervervSakInstance.getSysId()),
egrunnervervSakInstanceMappingService
);
}
Expand All @@ -33,7 +33,9 @@ public InstanceProcessor<EgrunnervervJournalpostInstance> journalpostInstancePro
) {
return instanceProcessorFactoryService.createInstanceProcessor(
"journalpost",
egrunnervervJournalpostInstance -> Optional.ofNullable(egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getSysId()),
egrunnervervJournalpostInstance -> Optional.ofNullable(
egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceBody().getSysId()
),
egrunnervervJournalpostInstanceMappingService
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package no.fintlabs.mapping;

import no.fintlabs.exceptions.ArchiveCaseNotFoundException;
import no.fintlabs.gateway.instance.InstanceMapper;
import no.fintlabs.gateway.instance.kafka.ArchiveCaseRequestService;
import no.fintlabs.gateway.instance.model.File;
import no.fintlabs.gateway.instance.model.instance.InstanceObject;
import no.fintlabs.gateway.instance.web.FileClient;
import no.fintlabs.models.EgrunnervervJournalpostDocument;
import no.fintlabs.models.EgrunnervervJournalpostInstance;
import no.fintlabs.models.EgrunnervervJournalpostInstanceBody;
import no.fintlabs.models.EgrunnervervJournalpostReceiver;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
Expand All @@ -18,37 +21,49 @@
@Service
public class EgrunnervervJournalpostInstanceMappingService implements InstanceMapper<EgrunnervervJournalpostInstance> {

private final ArchiveCaseRequestService archiveCaseRequestService;
private final FileClient fileClient;

public EgrunnervervJournalpostInstanceMappingService(FileClient fileClient) {
public EgrunnervervJournalpostInstanceMappingService(
ArchiveCaseRequestService archiveCaseRequestService,
FileClient fileClient
) {
this.archiveCaseRequestService = archiveCaseRequestService;
this.fileClient = fileClient;
}

@Override
public Mono<InstanceObject> map(Long sourceApplicationId, EgrunnervervJournalpostInstance egrunnervervJournalpostInstance) {
EgrunnervervJournalpostDocument hoveddokument = egrunnervervJournalpostInstance
.getEgrunnervervJournalpostInstanceDto().getDokumenter()

archiveCaseRequestService.getByArchiveCaseId(egrunnervervJournalpostInstance.getSaksnummer())
.orElseThrow(() -> new ArchiveCaseNotFoundException(egrunnervervJournalpostInstance.getSaksnummer()));

EgrunnervervJournalpostInstanceBody egrunnervervJournalpostInstanceBody =
egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceBody();

EgrunnervervJournalpostDocument hoveddokument = egrunnervervJournalpostInstanceBody
.getDokumenter()
.stream()
.filter(EgrunnervervJournalpostDocument::getHoveddokument)
.findFirst()
.orElseThrow(() -> {
throw new IllegalStateException("No hoveddokument");
});

List<EgrunnervervJournalpostDocument> vedlegg = egrunnervervJournalpostInstance
.getEgrunnervervJournalpostInstanceDto().getDokumenter()
List<EgrunnervervJournalpostDocument> vedlegg = egrunnervervJournalpostInstanceBody
.getDokumenter()
.stream()
.filter(dokument -> !dokument.getHoveddokument())
.toList();

Mono<Map<String, String>> hoveddokumentInstanceValuePerKeyMono = mapHoveddokumentToInstanceValuePerKey(
sourceApplicationId,
egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getSysId(),
egrunnervervJournalpostInstanceBody.getSysId(),
hoveddokument
);
Mono<List<InstanceObject>> vedleggInstanceObjectsMono = mapAttachmentDocumentsToInstanceObjects(
sourceApplicationId,
egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getSysId(),
egrunnervervJournalpostInstanceBody.getSysId(),
vedlegg
);

Expand All @@ -60,18 +75,18 @@ public Mono<InstanceObject> map(Long sourceApplicationId, EgrunnervervJournalpos
HashMap<String, String> valuePerKey = new HashMap<>(
Map.of(
"saksnummer", Optional.ofNullable(egrunnervervJournalpostInstance.getSaksnummer()).orElse(""),
"tittel", Optional.ofNullable(egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getTittel()).orElse(""),
"dokumentNavn", Optional.ofNullable(egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getDokumentNavn()).orElse(""),
"dokumentDato", Optional.ofNullable(egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getDokumentDato()).orElse(""),
"forsendelsesmaate", Optional.ofNullable(egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getForsendelsesMate()).orElse("")
"tittel", Optional.ofNullable(egrunnervervJournalpostInstanceBody.getTittel()).orElse(""),
"dokumentNavn", Optional.ofNullable(egrunnervervJournalpostInstanceBody.getDokumentNavn()).orElse(""),
"dokumentDato", Optional.ofNullable(egrunnervervJournalpostInstanceBody.getDokumentDato()).orElse(""),
"forsendelsesmaate", Optional.ofNullable(egrunnervervJournalpostInstanceBody.getForsendelsesMate()).orElse("")
)
);
valuePerKey.putAll(hovedDokumentValuePerKeyAndVedleggInstanceObjects.getT1());
return InstanceObject.builder()
.valuePerKey(valuePerKey)
.objectCollectionPerKey(
Map.of(
"mottakere", egrunnervervJournalpostInstance.getEgrunnervervJournalpostInstanceDto().getMottakere()
"mottakere", egrunnervervJournalpostInstanceBody.getMottakere()
.stream()
.map(this::toInstanceObject)
.toList(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.fintlabs.mapping;

import no.fintlabs.ResourceRepository;
import no.fintlabs.exceptions.ArchiveResourceNotFoundException;
import no.fintlabs.gateway.instance.InstanceMapper;
import no.fintlabs.gateway.instance.model.instance.InstanceObject;
import no.fintlabs.models.EgrunnervervSakInstance;
Expand All @@ -13,34 +15,45 @@

@Service
public class EgrunnervervSakInstanceMappingService implements InstanceMapper<EgrunnervervSakInstance> {

private final ResourceRepository resourceRepository;

public EgrunnervervSakInstanceMappingService(ResourceRepository resourceRepository) {
this.resourceRepository = resourceRepository;
}

@Override
public Mono<InstanceObject> map(Long sourceApplicationId, EgrunnervervSakInstance egrunnervervSakInstance) {

String saksansvarlig = resourceRepository.getSaksansvarligHref(egrunnervervSakInstance.getSaksansvarligEpost())
.orElseThrow(() -> new ArchiveResourceNotFoundException(egrunnervervSakInstance.getSaksansvarligEpost()));

Map<String, String> valuePerKey = new HashMap<>();
valuePerKey.put("sys_id", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getSysId());
valuePerKey.put("knr", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getKnr());
valuePerKey.put("gnr", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getGnr());
valuePerKey.put("bnr", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getBnr());
valuePerKey.put("fnr", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getFnr());
valuePerKey.put("snr", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getSnr());
valuePerKey.put("takstnummer", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getTakstnummer());
valuePerKey.put("tittel", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getTittel());
valuePerKey.put("saksansvarligEpost", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getSaksansvarligEpost());
valuePerKey.put("eierforholdsnavn", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getEierforholdsnavn());
valuePerKey.put("eierforholdskode", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getEierforholdskode());
valuePerKey.put("prosjektnr", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getProsjektnr());
valuePerKey.put("prosjektnavn", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getProsjektnavn());
valuePerKey.put("kommunenavn", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getKommunenavn());
valuePerKey.put("adresse", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getAdresse());
valuePerKey.put("saksansvarlig", egrunnervervSakInstance.getSaksansvarlig());
valuePerKey.put("sys_id", egrunnervervSakInstance.getSysId());
valuePerKey.put("knr", egrunnervervSakInstance.getKnr());
valuePerKey.put("gnr", egrunnervervSakInstance.getGnr());
valuePerKey.put("bnr", egrunnervervSakInstance.getBnr());
valuePerKey.put("fnr", egrunnervervSakInstance.getFnr());
valuePerKey.put("snr", egrunnervervSakInstance.getSnr());
valuePerKey.put("takstnummer", egrunnervervSakInstance.getTakstnummer());
valuePerKey.put("tittel", egrunnervervSakInstance.getTittel());
valuePerKey.put("saksansvarligEpost", egrunnervervSakInstance.getSaksansvarligEpost());
valuePerKey.put("eierforholdsnavn", egrunnervervSakInstance.getEierforholdsnavn());
valuePerKey.put("eierforholdskode", egrunnervervSakInstance.getEierforholdskode());
valuePerKey.put("prosjektnr", egrunnervervSakInstance.getProsjektnr());
valuePerKey.put("prosjektnavn", egrunnervervSakInstance.getProsjektnavn());
valuePerKey.put("kommunenavn", egrunnervervSakInstance.getKommunenavn());
valuePerKey.put("adresse", egrunnervervSakInstance.getAdresse());
valuePerKey.put("saksansvarlig", saksansvarlig);
return Mono.just(
InstanceObject.builder()
.valuePerKey(valuePerKey)
.objectCollectionPerKey(Map.of(
"saksparter", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getSaksparter()
"saksparter", egrunnervervSakInstance.getSaksparter()
.stream()
.map(this::toInstanceObject)
.toList(),
"klasseringer", egrunnervervSakInstance.getEgrunnervervSakInstanceDto().getKlasseringer()
"klasseringer", egrunnervervSakInstance.getKlasseringer()
.stream()
.map(this::toInstanceObject)
.toList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
@Builder
public class EgrunnervervJournalpostInstance {
@NotNull
private final EgrunnervervJournalpostInstanceDto egrunnervervJournalpostInstanceDto;
private final EgrunnervervJournalpostInstanceBody egrunnervervJournalpostInstanceBody;
@NotNull
private final String saksnummer;
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
package no.fintlabs.models;


import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.extern.jackson.Jacksonized;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

@Getter
@Jacksonized
@EqualsAndHashCode
@Builder
public class EgrunnervervJournalpostInstanceDto {
public class EgrunnervervJournalpostInstanceBody {
@NotNull
@JsonProperty("sys_id")
private final String sysId;
@NotNull
@NotBlank
private final String table;
@NotNull
private final String tittel;
Expand Down
Loading

0 comments on commit 51bd279

Please sign in to comment.