diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/api/dto/DashboardStatsDto.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/api/dto/DashboardStatsDto.java index 694e0d9..ed00399 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/api/dto/DashboardStatsDto.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/api/dto/DashboardStatsDto.java @@ -4,6 +4,7 @@ public interface DashboardStatsDto { record AdminStats( long totalCommunities, long pendingUsers, + long pendingMemberships, long totalActiveMemberships ) {} diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/service/DashboardService.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/service/DashboardService.java index 64eaf0c..eb814bc 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/service/DashboardService.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/dashboard/service/DashboardService.java @@ -26,9 +26,10 @@ public class DashboardService { public DashboardStatsDto.AdminStats getAdminStats() { long communities = energyCommunityRepository.count(); long pendingUsers = userRepository.countByStatusAndEmailVerified(RegistrationStatus.PENDING, true); + long pendingMemberships = membershipRepository.countByStatus(MembershipStatus.PENDING); long activeMemberships = membershipRepository.countByStatus(MembershipStatus.ACTIVE); - return new DashboardStatsDto.AdminStats(communities, pendingUsers, activeMemberships); + return new DashboardStatsDto.AdminStats(communities, pendingUsers, pendingMemberships, activeMemberships); } public DashboardStatsDto.UserStats getUserStats(UUID userId) { diff --git a/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/api/DashboardControllerTest.java b/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/api/DashboardControllerTest.java index 0573b6d..f8c2d96 100644 --- a/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/api/DashboardControllerTest.java +++ b/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/api/DashboardControllerTest.java @@ -25,7 +25,7 @@ class DashboardControllerTest { @Test void getAdminDashboard() { - DashboardStatsDto.AdminStats stats = new DashboardStatsDto.AdminStats(5, 3, 12); + DashboardStatsDto.AdminStats stats = new DashboardStatsDto.AdminStats(5, 3, 2, 12); when(dashboardService.getAdminStats()).thenReturn(stats); ResponseEntity response = dashboardController.getAdminDashboard(); @@ -33,18 +33,20 @@ class DashboardControllerTest { assertEquals(200, response.getStatusCode().value()); assertEquals(5, response.getBody().totalCommunities()); assertEquals(3, response.getBody().pendingUsers()); + assertEquals(2, response.getBody().pendingMemberships()); assertEquals(12, response.getBody().totalActiveMemberships()); } @Test void getAdminDashboard_empty() { - DashboardStatsDto.AdminStats stats = new DashboardStatsDto.AdminStats(0, 0, 0); + DashboardStatsDto.AdminStats stats = new DashboardStatsDto.AdminStats(0, 0, 0, 0); when(dashboardService.getAdminStats()).thenReturn(stats); ResponseEntity response = dashboardController.getAdminDashboard(); assertEquals(0, response.getBody().totalCommunities()); assertEquals(0, response.getBody().pendingUsers()); + assertEquals(0, response.getBody().pendingMemberships()); assertEquals(0, response.getBody().totalActiveMemberships()); } diff --git a/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/service/DashboardServiceTest.java b/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/service/DashboardServiceTest.java index 628c6c9..e9514f6 100644 --- a/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/service/DashboardServiceTest.java +++ b/eeg_backend/src/test/java/at/mueller/eeg/backend/dashboard/service/DashboardServiceTest.java @@ -40,12 +40,14 @@ class DashboardServiceTest { void getAdminStats_returnsCorrectCounts() { when(energyCommunityRepository.count()).thenReturn(5L); when(userRepository.countByStatusAndEmailVerified(RegistrationStatus.PENDING, true)).thenReturn(3L); + when(membershipRepository.countByStatus(MembershipStatus.PENDING)).thenReturn(2L); when(membershipRepository.countByStatus(MembershipStatus.ACTIVE)).thenReturn(10L); DashboardStatsDto.AdminStats stats = dashboardService.getAdminStats(); assertEquals(5, stats.totalCommunities()); assertEquals(3, stats.pendingUsers()); + assertEquals(2, stats.pendingMemberships()); assertEquals(10, stats.totalActiveMemberships()); } diff --git a/eeg_frontend/src/app/pages/dashboard-overview/dashboard-overview.html b/eeg_frontend/src/app/pages/dashboard-overview/dashboard-overview.html index fbe2fa6..e5b79f6 100644 --- a/eeg_frontend/src/app/pages/dashboard-overview/dashboard-overview.html +++ b/eeg_frontend/src/app/pages/dashboard-overview/dashboard-overview.html @@ -8,15 +8,19 @@

{{ error() }}

} @else if (role === 'ADMIN' && adminStats(); as stats) { -
+

Energiegemeinschaften

{{ stats.totalCommunities }}

-

Offene Freigaben

+

Ausstehende Freischaltungen

{{ stats.pendingUsers }}

+
+

Offene MitgliedsantrÃĪge

+

{{ stats.pendingMemberships }}

+

Aktive Mitgliedschaften

{{ stats.totalActiveMemberships }}

diff --git a/eeg_frontend/src/app/services/dashboard.ts b/eeg_frontend/src/app/services/dashboard.ts index 80c0974..8243de9 100644 --- a/eeg_frontend/src/app/services/dashboard.ts +++ b/eeg_frontend/src/app/services/dashboard.ts @@ -6,6 +6,7 @@ import {environment} from '../../environments/environment'; export interface AdminStats { totalCommunities: number; pendingUsers: number; + pendingMemberships: number; totalActiveMemberships: number; }