Skip to content

Commit

Permalink
(wip) behandlingens livsløp
Browse files Browse the repository at this point in the history
  • Loading branch information
farjamm committed Nov 12, 2024
1 parent 5974c05 commit f77c62f
Show file tree
Hide file tree
Showing 7 changed files with 170 additions and 96 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package no.nav.data.etterlevelse.behandling;
package no.nav.data.etterlevelse.behandling;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
Expand All @@ -10,8 +10,9 @@
import no.nav.data.common.exceptions.ValidationException;
import no.nav.data.common.rest.PageParameters;
import no.nav.data.common.rest.RestResponsePage;
import no.nav.data.pvk.pvkdokument.domain.PvkDokument;
import no.nav.data.pvk.pvkdokument.domain.PvkDokumentFil;
import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslop;
import no.nav.data.etterlevelse.behandling.dto.BehandlingensLivslopRequest;
import no.nav.data.etterlevelse.behandling.dto.BehandlingensLivslopResponse;
import no.nav.data.pvk.pvkdokument.dto.PvkDokumentRequest;
import no.nav.data.pvk.pvkdokument.dto.PvkDokumentResponse;
import org.springframework.data.domain.Page;
Expand Down Expand Up @@ -40,74 +41,78 @@
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/pvkdokument")
@Tag(name = "Pvk Dokument", description = "Pvk Dokument for etterlevelsesdokumentasjon")
@RequestMapping("/behandlingenslivslop")
@Tag(name = "Behandlingens Livsløp", description = "Behandlingens Livsløp for etterlevelsesdokumentasjon")
public class BehandlingensLivslopController {

private final BehandlingensLivslopService pvkDokumentService;
private final BehandlingensLivslopService service;

@Operation(summary = "Get All Pvk Document")
@Operation(summary = "Get All Behandlingens Livsløp")
@ApiResponse(description = "ok")
@GetMapping
public ResponseEntity<RestResponsePage<PvkDokumentResponse>> getAll(
public ResponseEntity<RestResponsePage<BehandlingensLivslopResponse>> getAll(
PageParameters pageParameters
) {
log.info("Get all Pvk Document");
Page<PvkDokument> page = pvkDokumentService.getAll(pageParameters);
return ResponseEntity.ok(new RestResponsePage<>(page).convert(PvkDokumentResponse::buildFrom));
log.info("Get all Behandlingens Livsløp");
Page<BehandlingensLivslop> page = service.getAll(pageParameters);
return ResponseEntity.ok(new RestResponsePage<>(page).convert(BehandlingensLivslopResponse::buildFrom));
}

@Operation(summary = "Get One Pvk Document")
@Operation(summary = "Get One Behandlingens Livsløp")
@ApiResponse(description = "ok")
@GetMapping("/{id}")
public ResponseEntity<PvkDokumentResponse> getById(@PathVariable UUID id) {
log.info("Get Pvk Document id={}", id);
return ResponseEntity.ok(PvkDokumentResponse.buildFrom(pvkDokumentService.get(id)));
public ResponseEntity<BehandlingensLivslopResponse> getById(@PathVariable UUID id) {
log.info("Get Behandlingens Livsløp id={}", id);
return ResponseEntity.ok(BehandlingensLivslopResponse.buildFrom(service.get(id)));
}

@Operation(summary = "Get Pvk Document by etterlevelsedokument id")
@Operation(summary = "Get Behandlingens Livsløp by etterlevelsedokument id")
@ApiResponse(description = "ok")
@GetMapping("/etterlevelsedokument/{etterlevelseDokumentId}")
public ResponseEntity<PvkDokumentResponse> getPvkDokumentByEtterlevelseDokumentId(@PathVariable String etterlevelseDokumentId) {
log.info("Get Pvk Document by etterlevelseDokument id={}", etterlevelseDokumentId);
Optional<PvkDokument> pvkDokument = pvkDokumentService.getByEtterlevelseDokumentasjon(etterlevelseDokumentId);

return pvkDokument.map(dokument -> ResponseEntity.ok(PvkDokumentResponse.buildFrom(dokument))).orElseGet(() -> ResponseEntity.notFound().build());
public ResponseEntity<BehandlingensLivslopResponse> getPvkDokumentByEtterlevelseDokumentId(@PathVariable String etterlevelseDokumentId) {
log.info("Get Behandlingens Livsløp by etterlevelseDokument id={}", etterlevelseDokumentId);
Optional<BehandlingensLivslop> behandlingensLivslop = service.getByEtterlevelseDokumentasjon(etterlevelseDokumentId);
if (behandlingensLivslop.isPresent()) {
return ResponseEntity.ok(BehandlingensLivslopResponse.buildFrom(behandlingensLivslop.get()));
} else {
return ResponseEntity.notFound().build();
}
}

@Operation(summary = "Create Pvk Document")
@ApiResponse(responseCode = "201", description = "PvkDokument created")
@Operation(summary = "Create Behandlingens Livsløp")
@ApiResponse(responseCode = "201", description = "Behandlingens Livsløp created")
@PostMapping
public ResponseEntity<PvkDokumentResponse> createPvkDokumente(@RequestBody PvkDokumentRequest request) {
log.info("Create PvkDokument");
public ResponseEntity<BehandlingensLivslopResponse> createBehandlingensLivslop(@RequestBody BehandlingensLivslopRequest request) {
log.info("Create Behandlingens Livsløp");

var pvkDokument = pvkDokumentService.save(request.convertToPvkDokument(), request.isUpdate());
var behandlingensLivslop = service.save(request.convertToBehandlingensLivslop(), request.isUpdate());

return new ResponseEntity<>(PvkDokumentResponse.buildFrom(pvkDokument), HttpStatus.CREATED);
return new ResponseEntity<>(BehandlingensLivslopResponse.buildFrom(behandlingensLivslop), HttpStatus.CREATED);
}

@Operation(summary = "Update Pvk Document")
@ApiResponse(description = "Pvk Document updated")
@Operation(summary = "Update Behandlingens Livsløp")
@ApiResponse(description = "Behandlingens Livsløp updated")
@PutMapping("/{id}")
public ResponseEntity<PvkDokumentResponse> updatePvkDokument(@PathVariable UUID id, @Valid @RequestBody PvkDokumentRequest request) {
log.info("Update Pvk Document id={}", id);
public ResponseEntity<BehandlingensLivslopResponse> updateBehandlingensLivslo(@PathVariable UUID id, @Valid @RequestBody BehandlingensLivslopRequest request) {
log.info("Update Behandlingens Livsløp id={}", id);

if (!Objects.equals(id, request.getIdAsUUID())) {
throw new ValidationException(String.format("id mismatch in request %s and path %s", request.getId(), id));
}

var pvkDokumentToUpdate = pvkDokumentService.get(id);
var behandlingensLivslopToUpdate = service.get(id);

if(pvkDokumentToUpdate == null) {
throw new ValidationException(String.format("Could not find pvk dokument to be updated with id = %s ", request.getId()));
if (behandlingensLivslopToUpdate == null) {
throw new ValidationException(String.format("Could not find behandlingens livsløp to be updated with id = %s ", request.getId()));
}

request.mergeInto(pvkDokumentToUpdate);
var pvkDokument = pvkDokumentService.save(pvkDokumentToUpdate, request.isUpdate());
return ResponseEntity.ok(PvkDokumentResponse.buildFrom(pvkDokument));
request.mergeInto(behandlingensLivslopToUpdate);
var behandlingensLivslop = service.save(behandlingensLivslopToUpdate, request.isUpdate());
return ResponseEntity.ok(BehandlingensLivslopResponse.buildFrom(behandlingensLivslop));
}

@Operation(summary = "Delete Pvk Document")
/* FIXME
@Operation(summary = "Delete Behandlingens Livsløp")
@ApiResponse(description = "Pvk Document deleted")
@DeleteMapping("/{id}")
public ResponseEntity<PvkDokumentResponse> deletePvkDokumentById(@PathVariable UUID id) {
Expand Down Expand Up @@ -192,4 +197,5 @@ private boolean validFile(MultipartFile i) {
private byte[] getBytes(MultipartFile f) {
return f.getBytes();
}
//*/
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.data.etterlevelse.behandling;

import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslop;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

Expand All @@ -9,9 +10,7 @@

public interface BehandlingensLivslopRepo extends JpaRepository<BehandlingensLivslop, UUID> {

@Query(value = "select * from pvk_dokument_fil where pvk_dokument_id = ?1", nativeQuery = true)
List<BehandlingensLivslop> findPvkDokumentFilerByPvkDokumentId(String pvkDokumentId);
@Query(value = "select * from behandlingens_livslop where etterlevelse_dokumentasjon_id = ?1", nativeQuery = true)
Optional<BehandlingensLivslop> findByEtterlevelseDokumentasjonId(String etterlevelseDokumentasjonId);

@Query(value = "select * from pvk_dokument_fil where file_name = ?1 and file_type = ?2", nativeQuery = true)
Optional<BehandlingensLivslop> findPvkDokumentFilerByFilenameAndType(String fileName, String fileType);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,12 @@
import lombok.extern.slf4j.Slf4j;
import no.nav.data.common.exceptions.NotFoundException;
import no.nav.data.common.rest.PageParameters;
import no.nav.data.pvk.pvkdokument.domain.PvkDokument;
import no.nav.data.pvk.pvkdokument.domain.PvkDokumentFil;
import no.nav.data.pvk.pvkdokument.domain.PvkDokumentFilRepo;
import no.nav.data.pvk.pvkdokument.domain.PvkDokumentRepo;
import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslop;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;
import java.util.UUID;

Expand All @@ -22,71 +18,52 @@
@RequiredArgsConstructor
public class BehandlingensLivslopService {

private final BehandlingensLivslopRepo pvkDokumentRepo;
private final BehandlingensLivslopRepo repo;

public PvkDokument get(UUID uuid) {
if (uuid == null || !pvkDokumentRepo.existsById(uuid)) return null;
return getPvkDokument(uuid);
public BehandlingensLivslop get(UUID uuid) {
if (uuid == null || !repo.existsById(uuid)) return null;
return getBehandlingensLivslop(uuid);
}

private PvkDokument getPvkDokument(UUID uuid) {
return pvkDokumentRepo.findById(uuid).orElseThrow(() -> new NotFoundException("Couldn't find Pvk Dokument with id " + uuid));
private BehandlingensLivslop getBehandlingensLivslop(UUID uuid) {
return repo.findById(uuid).orElseThrow(() -> new NotFoundException("Couldn't find behandlingens livsløp with id " + uuid));
}

@Transactional
public PvkDokument saveTestData(PvkDokument pvkDokument) {
pvkDokument = pvkDokumentRepo.save(pvkDokument);
pvkDokumentRepo.flush();
return pvkDokument;
public BehandlingensLivslop saveTestData(BehandlingensLivslop behandlingensLivslop) {
behandlingensLivslop = repo.save(behandlingensLivslop);
repo.flush();
return behandlingensLivslop;
}

public Page<PvkDokument> getAll(PageParameters pageParameters) {
return pvkDokumentRepo.findAll(pageParameters.createPage());
public Page<BehandlingensLivslop> getAll(PageParameters pageParameters) {
return repo.findAll(pageParameters.createPage());
}

public Optional<PvkDokument> getByEtterlevelseDokumentasjon(String etterlevelseDokumentasjonId) {
return pvkDokumentRepo.findByEtterlevelseDokumensjon(etterlevelseDokumentasjonId);
public Optional<BehandlingensLivslop> getByEtterlevelseDokumentasjon(String etterlevelseDokumentasjonId) {
return repo.findByEtterlevelseDokumentasjonId(etterlevelseDokumentasjonId);
}

@Transactional(propagation = Propagation.REQUIRED)
public PvkDokument save(PvkDokument pvkDokument, boolean isUpdate) {
public BehandlingensLivslop save(BehandlingensLivslop behandlingensLivslop, boolean isUpdate) {
if (!isUpdate) {
var existingPvkDokument = getByEtterlevelseDokumentasjon(pvkDokument.getEtterlevelseDokumentId());
if (existingPvkDokument.isPresent()) {
log.warn("Found existing pvk document when trying to create for etterlevelse dokumentation id: {}", pvkDokument.getEtterlevelseDokumentId());
pvkDokument.setId(existingPvkDokument.get().getId());
var existingBehandlingensLivslop = getByEtterlevelseDokumentasjon(behandlingensLivslop.getEtterlevelseDokumentasjonId());
if (existingBehandlingensLivslop.isPresent()) {
log.warn("Found existing behandlingens livsløp when trying to create for etterlevelse dokumentation id: {}", behandlingensLivslop.getEtterlevelseDokumentasjonId());
behandlingensLivslop.setId(existingBehandlingensLivslop.get().getId());
} else {
pvkDokument.setId(UUID.randomUUID());
behandlingensLivslop.setId(UUID.randomUUID());
}
}

return pvkDokumentRepo.save(pvkDokument);
return repo.save(behandlingensLivslop);
}

@Transactional(propagation = Propagation.REQUIRED)
public PvkDokument delete(UUID id) {
var pvkDokumentToDelete = pvkDokumentRepo.findById(id);
pvkDokumentRepo.deleteById(id);
return pvkDokumentToDelete.orElse(null);
public BehandlingensLivslop delete(UUID id) {
var behandlingensLivslopToDelete = repo.findById(id);
repo.deleteById(id);
return behandlingensLivslopToDelete.orElse(null);
}

public List<PvkDokumentFil> getPvkDokumentFilByPvkDokumentId(String pvkDokumentId) {
return pvkDokumentFilRepo.findPvkDokumentFilerByPvkDokumentId(pvkDokumentId);
}

public Optional<PvkDokumentFil> getPvkDokumentFilByFileNameAndType(String filName, String filType) {
return pvkDokumentFilRepo.findPvkDokumentFilerByFilenameAndType(filName, filType);
}

@Transactional(propagation = Propagation.REQUIRED)
public List<PvkDokumentFil> saveImages(List<PvkDokumentFil> files) {
return pvkDokumentFilRepo.saveAll(files);
}

@Transactional(propagation = Propagation.REQUIRED)
public PvkDokumentFil deleteFile(UUID id) {
var pvkDokumentFilToDelete = pvkDokumentFilRepo.findById(id);
pvkDokumentFilRepo.deleteById(id);
return pvkDokumentFilToDelete.orElse(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@
@Table(name = "BEHANDLINGENS_LIVSLOP")
public class BehandlingensLivslop extends Auditable {

// FIXME:
// 1) Skal denne extende Auditable?
// 2) Riktig med @EqualsAndHashCode(callSuper = true)?

@Id
@Builder.Default
@Column(name = "ID")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package no.nav.data.etterlevelse.behandling.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import no.nav.data.common.validator.RequestElement;
import no.nav.data.common.validator.Validator;
import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslop;
import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslopData;
import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslopFil;
import no.nav.data.etterlevelse.etterlevelseDokumentasjon.dto.EtterlevelseDokumentasjonResponse;

import java.util.List;
import java.util.UUID;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BehandlingensLivslopRequest implements RequestElement {

private String id;

private String etterlevelseDokumentasjonId;

private String beskrivelse;

private List<BehandlingensLivslopFil> filer;

private Boolean update;

public BehandlingensLivslop convertToBehandlingensLivslop() {
return BehandlingensLivslop.builder()
.id(id != null && !id.isEmpty() ? UUID.fromString(id) : null)
.etterlevelseDokumentasjonId(etterlevelseDokumentasjonId)
.behandlingensLivslopData(BehandlingensLivslopData.builder()
.beskrivelse(beskrivelse)
.filer(filer)
.build())
.build();
}

public void validateFieldValues(Validator<?> validator) {
// FIXME
}

public Boolean getUpdate() {
return update;
}

public void mergeInto(BehandlingensLivslop bl) {
bl.setEtterlevelseDokumentasjonId(etterlevelseDokumentasjonId);
bl.getBehandlingensLivslopData().setBeskrivelse(beskrivelse);
bl.getBehandlingensLivslopData().setFiler(filer);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package no.nav.data.etterlevelse.behandling.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslop;
import no.nav.data.etterlevelse.behandling.domain.BehandlingensLivslopFil;
import no.nav.data.etterlevelse.etterlevelseDokumentasjon.dto.EtterlevelseDokumentasjonResponse;

import java.util.List;
import java.util.UUID;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BehandlingensLivslopResponse {

private UUID id;

private String etterlevelseDokumentasjonId;

private String beskrivelse;

private List<BehandlingensLivslopFil> filer;

public static BehandlingensLivslopResponse buildFrom(BehandlingensLivslop bl) {
return builder()
.id(bl.getId())
.etterlevelseDokumentasjonId(bl.getEtterlevelseDokumentasjonId())
.beskrivelse(bl.getBehandlingensLivslopData().getBeskrivelse())
.filer(bl.getBehandlingensLivslopData().getFiler())
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ public enum SuksesskriterieStatus {
UNDER_ARBEID,
OPPFYLT,
IKKE_RELEVANT,
IKKE_OPPFYLT,
IKKE_OPPFYLT;

}

0 comments on commit f77c62f

Please sign in to comment.