Skip to content

Commit eebd76d

Browse files
committed
feature: Refactor dashboard components to include team statistics and update data models
1 parent 493c20b commit eebd76d

6 files changed

Lines changed: 101 additions & 11 deletions

File tree

apps/dolly-backend/src/main/java/no/nav/dolly/domain/dto/DashboardDTO.java renamed to apps/dolly-backend/src/main/java/no/nav/dolly/domain/dto/DashboardPersonerDTO.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
@Builder
1212
@NoArgsConstructor
1313
@AllArgsConstructor
14-
public class DashboardDTO {
14+
public class DashboardPersonerDTO {
1515

1616
private LocalDate dato;
1717
private Long personerTotalt;
1818
private Long nye;
1919
private Long gjenopprettede;
2020
private Long pdlFeil;
21-
private Long annenFeil;
21+
private Long andreFeil;
2222
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package no.nav.dolly.domain.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.time.LocalDate;
9+
import java.util.List;
10+
11+
@Data
12+
@Builder
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
public class DashboardTeamsDTO {
16+
17+
private LocalDate dato;
18+
private List<Entry> entries;
19+
20+
@Data
21+
@Builder
22+
@NoArgsConstructor
23+
@AllArgsConstructor
24+
public static class Entry {
25+
26+
private String epost;
27+
private Long antall;
28+
}
29+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
import java.time.LocalDate;
9+
10+
@Data
11+
@Builder
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
public class TeamFragment {
15+
16+
private Long antall;
17+
private LocalDate dato;
18+
private String epost;
19+
}

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package no.nav.dolly.provider;
22

33
import lombok.RequiredArgsConstructor;
4-
import no.nav.dolly.domain.dto.DashboardDTO;
4+
import no.nav.dolly.domain.dto.DashboardPersonerDTO;
5+
import no.nav.dolly.domain.dto.DashboardTeamsDTO;
56
import no.nav.dolly.service.DashboardService;
67
import org.springframework.http.MediaType;
78
import org.springframework.web.bind.annotation.GetMapping;
@@ -16,9 +17,15 @@ public class DashboardController {
1617

1718
private final DashboardService dashboardService;
1819

19-
@GetMapping(value = "/bestillinger", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
20-
public Flux<DashboardDTO> getDashboard() {
20+
@GetMapping(value = "/personer", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
21+
public Flux<DashboardPersonerDTO> getDashboard() {
2122

22-
return dashboardService.getBestillingStatus();
23+
return dashboardService.getPersonerStatus();
24+
}
25+
26+
@GetMapping(value = "/teams", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
27+
public Flux<DashboardTeamsDTO> getDashboardTeams() {
28+
29+
return dashboardService.getTeamsStatus();
2330
}
2431
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import no.nav.dolly.domain.jpa.Bestilling;
44
import no.nav.dolly.domain.projection.BestillingerFragment;
55
import no.nav.dolly.domain.projection.RsBestillingFragment;
6+
import no.nav.dolly.domain.projection.TeamFragment;
67
import org.springframework.data.domain.Pageable;
78
import org.springframework.data.r2dbc.repository.Modifying;
89
import org.springframework.data.r2dbc.repository.Query;
@@ -166,4 +167,13 @@ when lower(bp.feil) like '%feil%' then 'FEIL'
166167
order by dato desc
167168
""")
168169
Flux<BestillingerFragment> findBestillingerOrderBySistOppdatert();
170+
171+
172+
@Query("""
173+
select count(*) antall, b.sist_oppdatert::date dato, br.epost from bestilling b
174+
join bruker br on br.id = b.bruker_id
175+
group by dato, br.epost
176+
order by dato desc;
177+
""")
178+
Flux<TeamFragment> findBestillingerForTeamsOrderBySistOppdatert();
169179
}

apps/dolly-backend/src/main/java/no/nav/dolly/service/DashboardService.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,32 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5-
import no.nav.dolly.domain.dto.DashboardDTO;
5+
import no.nav.dolly.domain.dto.DashboardPersonerDTO;
6+
import no.nav.dolly.domain.dto.DashboardTeamsDTO;
67
import no.nav.dolly.domain.projection.BestillingerFragment;
8+
import no.nav.dolly.domain.projection.TeamFragment;
79
import no.nav.dolly.repository.BestillingRepository;
810
import org.springframework.stereotype.Service;
911
import reactor.core.publisher.Flux;
1012

1113
import java.util.Comparator;
1214

15+
import static org.apache.commons.lang3.StringUtils.isNotBlank;
16+
1317
@Slf4j
1418
@Service
1519
@RequiredArgsConstructor
1620
public class DashboardService {
1721

1822
private final BestillingRepository bestillingRepository;
1923

20-
public Flux<DashboardDTO> getBestillingStatus() {
24+
public Flux<DashboardPersonerDTO> getPersonerStatus() {
2125

2226
return bestillingRepository.findBestillingerOrderBySistOppdatert()
2327
.groupBy(BestillingerFragment::getDato)
2428
.flatMap(Flux::collectList)
2529
.map(fragmentliste ->
26-
DashboardDTO.builder()
30+
DashboardPersonerDTO.builder()
2731
.dato(fragmentliste.stream()
2832
.map(BestillingerFragment::getDato)
2933
.findAny().orElse(null))
@@ -43,12 +47,33 @@ public Flux<DashboardDTO> getBestillingStatus() {
4347
"FEIL".equals(fragment.getPdlstatus()))
4448
.map(BestillingerFragment::getPersoner)
4549
.reduce(0L, Long::sum))
46-
.annenFeil(fragmentliste.stream()
50+
.andreFeil(fragmentliste.stream()
4751
.filter(fragment ->
4852
"FEIL".equals(fragment.getAnnenstatus()))
4953
.map(BestillingerFragment::getPersoner)
5054
.reduce(0L, Long::sum))
5155
.build())
52-
.sort(Comparator.comparing(DashboardDTO::getDato).reversed());
56+
.sort(Comparator.comparing(DashboardPersonerDTO::getDato).reversed());
57+
}
58+
59+
60+
public Flux<DashboardTeamsDTO> getTeamsStatus() {
61+
62+
return bestillingRepository.findBestillingerForTeamsOrderBySistOppdatert()
63+
.groupBy(TeamFragment::getDato)
64+
.flatMap(Flux::collectList)
65+
.map(fragmentliste ->
66+
DashboardTeamsDTO.builder()
67+
.dato(fragmentliste.stream()
68+
.map(TeamFragment::getDato)
69+
.findAny().orElse(null))
70+
.entries(fragmentliste.stream()
71+
.filter(fragment -> isNotBlank(fragment.getEpost()))
72+
.map(fragment -> new DashboardTeamsDTO.Entry(
73+
fragment.getEpost(),
74+
fragment.getAntall()))
75+
.toList())
76+
.build())
77+
.sort(Comparator.comparing(DashboardTeamsDTO::getDato).reversed());
5378
}
5479
}

0 commit comments

Comments
 (0)