Skip to content

Commit 0ebfc3c

Browse files
committed
Legg til DashboardOversiktDTO og utvid DashboardService med metoder for å hente detaljert og summert feilstatus, samt oppdater DashboardController for nye endepunkter
1 parent cbffc25 commit 0ebfc3c

8 files changed

Lines changed: 227 additions & 87 deletions

File tree

apps/dolly-backend/src/main/java/no/nav/dolly/domain/dto/BestillingProgressDTO.java

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@
88
import no.nav.dolly.domain.jpa.Testident.Master;
99

1010
import java.io.Serializable;
11+
import java.time.LocalDate;
1112
import java.time.LocalDateTime;
1213

13-
import static org.apache.commons.lang3.StringUtils.EMPTY;
14-
import static org.apache.commons.lang3.StringUtils.isNotBlank;
15-
1614
@Data
1715
@NoArgsConstructor
1816
@AllArgsConstructor
@@ -21,14 +19,15 @@
2119
public class BestillingProgressDTO implements Serializable {
2220

2321
private LocalDateTime sistOppdatert;
22+
private LocalDate bestillingDato;
2423

2524
private Long bestillingId;
2625

2726
private String ident;
2827
private Master master;
2928

3029
private String aaregStatus;
31-
private String arbeidsplassenCVStatus;
30+
private String arbeidsplassencvStatus;
3231
private String arbeidssoekerregisteretStatus;
3332
private String arenaforvalterStatus;
3433
private String brregstubStatus;
@@ -56,52 +55,4 @@ public class BestillingProgressDTO implements Serializable {
5655
private String sykemeldingStatus;
5756
private String udistubStatus;
5857
private String yrkesskadeStatus;
59-
60-
@Override
61-
public String toString() {
62-
63-
var resultat = "{" +
64-
"\"sistOppdatert\":\"" + sistOppdatert + "\"" +
65-
", \"bestillingId\":" + bestillingId +
66-
", \"ident\":\"" + ident + "\"" +
67-
", \"master\":\"" + master.toString() + "\"" +
68-
getError("aaregStatus" , aaregStatus) +
69-
getError("arbeidsplassenCVStatus" , arbeidsplassenCVStatus) +
70-
getError("arbeidssoekerregisteretStatus" , arbeidssoekerregisteretStatus) +
71-
getError("arenaforvalterStatus" , arenaforvalterStatus) +
72-
getError("brregstubStatus" , brregstubStatus) +
73-
getError("dokarkivStatus" , dokarkivStatus) +
74-
getError("etterlatteStatus" , etterlatteStatus) +
75-
getError("feil" , feil) +
76-
getError("fullmaktStatus" , fullmaktStatus) +
77-
getError("histarkStatus" , histarkStatus) +
78-
getError("inntektsmeldingStatus" , inntektsmeldingStatus) +
79-
getError("inntektstubStatus" , inntektstubStatus) +
80-
getError("instdataStatus" , instdataStatus) +
81-
getError("kelvinAapStatus" , kelvinAapStatus) +
82-
getError("kontoregisterStatus" , kontoregisterStatus) +
83-
getError("krrstubStatus" , krrstubStatus) +
84-
getError("medlStatus" , medlStatus) +
85-
getError("nomStatus" , nomStatus) +
86-
getError("pdlForvalterStatus" , pdlForvalterStatus) +
87-
getError("pdlImportStatus" , pdlImportStatus) +
88-
getError("pdlOrdreStatus" , isNotBlank(pdlOrdreStatus) ?
89-
pdlOrdreStatus.substring(15) : EMPTY) +
90-
getError("pdlPersonStatus" , pdlPersonStatus) +
91-
getError("pensjonforvalterStatus" , pensjonforvalterStatus) +
92-
getError("sigrunstubStatus" , sigrunstubStatus) +
93-
getError("skattekortStatus" , skattekortStatus) +
94-
getError("skjermingsregisterStatus" , skjermingsregisterStatus) +
95-
getError("sykemeldingStatus" , sykemeldingStatus) +
96-
getError("udistubStatus" , udistubStatus) +
97-
getError("yrkesskadeStatus" , yrkesskadeStatus) +
98-
"}";
99-
return resultat.length() > 120 ? resultat : EMPTY;
100-
}
101-
102-
private static String getError(String kolonnenavn, String kolonneverdi) {
103-
104-
return isNotBlank(kolonneverdi) && kolonneverdi.toLowerCase().contains("feil") ?
105-
", \"%s\":\"%s\"".formatted(kolonnenavn, kolonneverdi) : "";
106-
}
10758
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package no.nav.dolly.domain.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
9+
import java.time.Month;
10+
11+
@Data
12+
@Builder
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
public class DashboardOversiktDTO {
16+
17+
@JsonIgnore
18+
private String aarManed;
19+
20+
private Integer aar;
21+
private Month maaned;
22+
private Integer totaltAntallPersoner;
23+
private Integer nye;
24+
private Integer gjenopprettede;
25+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package no.nav.dolly.domain.projection;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
@Data
9+
@Builder
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
public class OversiktFragment {
13+
14+
private String maaned;
15+
private Long antall;
16+
private String gjenopprettstatus;
17+
}

apps/dolly-backend/src/main/java/no/nav/dolly/provider/DashboardController.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@
44
import lombok.RequiredArgsConstructor;
55
import no.nav.dolly.domain.dto.DashboardDollyTeamsDTO;
66
import no.nav.dolly.domain.dto.DashboardOrganisasjonerDTO;
7+
import no.nav.dolly.domain.dto.DashboardOversiktDTO;
78
import no.nav.dolly.domain.dto.DashboardPersonerDTO;
89
import no.nav.dolly.domain.dto.DashboardTeamsDTO;
910
import no.nav.dolly.service.DashboardService;
1011
import org.springframework.web.bind.annotation.GetMapping;
1112
import org.springframework.web.bind.annotation.RequestMapping;
13+
import org.springframework.web.bind.annotation.RequestParam;
1214
import org.springframework.web.bind.annotation.RestController;
1315
import reactor.core.publisher.Flux;
1416
import tools.jackson.databind.JsonNode;
1517

18+
import java.time.Month;
19+
1620
@RequestMapping("/api/v1/dashboard")
1721
@RestController
1822
@RequiredArgsConstructor
@@ -27,11 +31,27 @@ public Flux<DashboardPersonerDTO> getDashboardPersoner() {
2731
return dashboardService.getPersonerStatus();
2832
}
2933

30-
@GetMapping(value = "/feil")
31-
@Operation(description = "Henter feilstatus for personer opprettet.")
32-
public Flux<JsonNode> getDashboardFeil() {
34+
@GetMapping(value = "/feil/detaljert")
35+
@Operation(description = "Henter detaljert feilstatus for personer opprettet.")
36+
public Flux<JsonNode> getDashboardFeilDetaljert(@RequestParam int year,
37+
@RequestParam Month month,
38+
@RequestParam int day) {
39+
40+
return dashboardService.getFeilstatusDetaljert(year, month, day);
41+
}
42+
43+
@GetMapping(value = "/feil/summert")
44+
@Operation(description = "Henter summert feilstatus for personer opprettet.")
45+
public Flux<JsonNode> getDashboardFeil(@RequestParam int year, @RequestParam Month month) {
46+
47+
return dashboardService.getFeilstatusSummert(year, month);
48+
}
49+
50+
@GetMapping(value = "/oversikt")
51+
@Operation(description = "Henter tilgjengelige perioder.")
52+
public Flux<DashboardOversiktDTO> getDashboardFeilOversikt() {
3353

34-
return dashboardService.getFeilstatus();
54+
return dashboardService.getPerioderOversikt();
3555
}
3656

3757
@GetMapping(value = "/teams")

apps/dolly-backend/src/main/java/no/nav/dolly/provider/advice/HttpExceptionAdvice.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
@ControllerAdvice
3131
public class HttpExceptionAdvice extends DefaultErrorWebExceptionHandler {
3232

33-
private static final String GATEWAY_ORIGINAL_REQUEST_URL = "org.springframework.web.reactive.HandlerMapping.pathWithinHandlerMapping";
34-
3533
public HttpExceptionAdvice(ErrorAttributes errorAttributes,
3634
WebProperties webProperties,
3735
ErrorProperties errorProperties,
@@ -47,7 +45,7 @@ private ExceptionInformation informationForException(RuntimeException exception,
4745
.error(status.getReasonPhrase())
4846
.status(status.value())
4947
.message(exception.getMessage())
50-
.path(serverWebExchange.getAttribute(GATEWAY_ORIGINAL_REQUEST_URL))
48+
.path(serverWebExchange.getRequest().getURI().getPath())
5149
.timestamp(LocalDateTime.now())
5250
.build();
5351
log.warn("HttpException: {}", exceptionInfo);
@@ -86,12 +84,12 @@ ExceptionInformation notFoundRequest(ServerWebExchange serverWebExchange, Runtim
8684
@ExceptionHandler(Exception.class)
8785
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
8886
ExceptionInformation internalServerError(ServerWebExchange serverWebExchange, Exception exception) {
89-
log.error("Uventet feil ved request til {}", serverWebExchange.getAttribute(GATEWAY_ORIGINAL_REQUEST_URL), exception);
87+
log.error("Uventet feil ved request til {}", serverWebExchange.getRequest().getURI().getPath(), exception);
9088
return ExceptionInformation.builder()
9189
.error(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase())
9290
.status(HttpStatus.INTERNAL_SERVER_ERROR.value())
9391
.message(exception.getMessage())
94-
.path(serverWebExchange.getAttribute(GATEWAY_ORIGINAL_REQUEST_URL))
92+
.path(serverWebExchange.getRequest().getURI().getPath())
9593
.timestamp(LocalDateTime.now())
9694
.build();
9795
}

apps/dolly-backend/src/main/java/no/nav/dolly/repository/BestillingProgressRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ where bp.bestilling_id in (select b.id
5454
Mono<BestillingProgress> findByIdAndLock(@Param("id") Long id);
5555

5656
@Query("""
57-
SELECT distinct column_name
57+
SELECT DISTINCT column_name
5858
FROM information_schema.columns
5959
WHERE table_name = 'bestilling_progress'
6060
AND column_name LIKE '%status%'

apps/dolly-backend/src/main/java/no/nav/dolly/repository/BestillingRepository.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import no.nav.dolly.domain.projection.BestillingerFragment;
55
import no.nav.dolly.domain.projection.DollyTeamFragment;
66
import no.nav.dolly.domain.projection.OrganisasjonFragment;
7+
import no.nav.dolly.domain.projection.OversiktFragment;
78
import no.nav.dolly.domain.projection.RsBestillingFragment;
89
import no.nav.dolly.domain.projection.TeamFragment;
910
import org.springframework.data.domain.Pageable;
@@ -203,4 +204,20 @@ select count(*) antall, to_char(b.sist_oppdatert, 'YYYY-MM') interval,
203204
order by interval desc;
204205
""")
205206
Flux<DollyTeamFragment> findBestillingerForDollyTeamsOrderBySistOppdatert();
207+
208+
@Query("""
209+
SELECT TO_CHAR(b.sist_oppdatert, 'YYYY-MM') maaned,
210+
COUNT(*) antall,
211+
CASE
212+
when b.opprettet_fra_id is not null then 'GJENOPPRETTING'
213+
when b.gjenopprettet_fra_ident is not null then 'GJENOPPRETTING'
214+
when b.opprett_fra_gruppe is not null then 'GJENOPPRETTING'
215+
else 'NYBESTILLING'
216+
END gjenopprettStatus
217+
FROM bestilling b
218+
JOIN bestilling_progress bp ON b.id = bp.bestilling_id
219+
GROUP BY maaned, gjenopprettStatus
220+
ORDER BY maaned DESC;
221+
""")
222+
Flux<OversiktFragment> findByAvailIntervals();
206223
}

0 commit comments

Comments
 (0)