From 76bf1620dfef8e30ed8c7a34bfaff5fcc4216489 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 28 Mar 2026 14:08:11 +0000
Subject: [PATCH 1/2] Initial plan
From 8e146e185212528bc39ea4b01fb14ef12f3793cb Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 31 Mar 2026 12:20:22 +0000
Subject: [PATCH 2/2] B.5: Create AdminDashboardController and tests
Agent-Logs-Url: https://github.com/fiap-tech-challenge-java/vigisus/sessions/b6196849-bf36-4aaa-b734-3e74ba7fc6da
Co-authored-by: rebecanonato89 <38442994+rebecanonato89@users.noreply.github.com>
---
backend/pom.xml | 5 ++
.../fiap/vigisus/config/SecurityConfig.java | 1 +
.../controller/AdminDashboardController.java | 52 +++++++++++++++++++
.../AdminDashboardControllerTest.java | 45 ++++++++++++++++
4 files changed, 103 insertions(+)
create mode 100644 backend/src/main/java/br/com/fiap/vigisus/controller/AdminDashboardController.java
create mode 100644 backend/src/test/java/br/com/fiap/vigisus/controller/AdminDashboardControllerTest.java
diff --git a/backend/pom.xml b/backend/pom.xml
index b05c8de..6bf708d 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -84,6 +84,11 @@
h2
test
+
+ org.springframework.security
+ spring-security-test
+ test
+
diff --git a/backend/src/main/java/br/com/fiap/vigisus/config/SecurityConfig.java b/backend/src/main/java/br/com/fiap/vigisus/config/SecurityConfig.java
index 147644a..967565b 100644
--- a/backend/src/main/java/br/com/fiap/vigisus/config/SecurityConfig.java
+++ b/backend/src/main/java/br/com/fiap/vigisus/config/SecurityConfig.java
@@ -31,6 +31,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.requestMatchers("/actuator/**").permitAll()
.requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll()
.requestMatchers("/api/**").permitAll()
+ .requestMatchers("/admin/**").permitAll()
.anyRequest().authenticated()
);
return http.build();
diff --git a/backend/src/main/java/br/com/fiap/vigisus/controller/AdminDashboardController.java b/backend/src/main/java/br/com/fiap/vigisus/controller/AdminDashboardController.java
new file mode 100644
index 0000000..758e8fc
--- /dev/null
+++ b/backend/src/main/java/br/com/fiap/vigisus/controller/AdminDashboardController.java
@@ -0,0 +1,52 @@
+package br.com.fiap.vigisus.controller;
+
+import io.micrometer.core.instrument.Counter;
+import io.micrometer.core.instrument.MeterRegistry;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.Instant;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/admin")
+@Tag(name = "Admin Dashboard", description = "Resumo operacional e métricas de uso da API")
+@CrossOrigin(origins = "*")
+@RequiredArgsConstructor
+public class AdminDashboardController {
+
+ private final MeterRegistry meterRegistry;
+
+ @GetMapping("/resumo")
+ @Operation(summary = "Resumo geral de uso da API com contadores de buscas")
+ public Map getResumo() {
+ Counter counter = meterRegistry.find("vigisus.buscas.total").counter();
+ double buscasTotal = counter != null ? counter.count() : 0.0;
+ return Map.of(
+ "buscas_total", buscasTotal,
+ "timestamp", Instant.now().toString()
+ );
+ }
+
+ @GetMapping("/top-municipios")
+ @Operation(summary = "Top municĂpios mais consultados por volume de buscas")
+ public List