sakthivikram/geo-location
0
1package com.georeport.controller;2 3import com.georeport.dto.AnalyticsResponse;4import com.georeport.dto.ApiResponse;5import com.georeport.service.AnalyticsService;6import org.springframework.beans.factory.annotation.Autowired;7import org.springframework.format.annotation.DateTimeFormat;8import org.springframework.http.ResponseEntity;9import org.springframework.web.bind.annotation.*;10 11import java.time.LocalDateTime;12import java.util.List;13import java.util.Map;14 15/**16 * REST controller for analytics endpoints (Admin only).17 */18@RestController19@RequestMapping("/api/admin/analytics")20@CrossOrigin(origins = "*")21public class AnalyticsController {22 23 @Autowired24 private AnalyticsService analyticsService;25 26 /**27 * Get comprehensive analytics data28 */29 @GetMapping30 public ResponseEntity<ApiResponse<AnalyticsResponse>> getAnalytics(31 @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,32 @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate) {33 34 AnalyticsResponse analytics = analyticsService.getAnalytics(startDate, endDate);35 return ResponseEntity.ok(ApiResponse.success(analytics));36 }37 38 /**39 * Get issue trends (daily counts for last N days)40 */41 @GetMapping("/trends")42 public ResponseEntity<ApiResponse<Map<String, Long>>> getTrends(43 @RequestParam(defaultValue = "30") int days) {44 45 Map<String, Long> trends = analyticsService.getTrends(days);46 return ResponseEntity.ok(ApiResponse.success(trends));47 }48 49 /**50 * Get category distribution51 */52 @GetMapping("/categories")53 public ResponseEntity<ApiResponse<Map<String, Long>>> getCategoryDistribution() {54 Map<String, Long> distribution = analyticsService.getCategoryDistribution();55 return ResponseEntity.ok(ApiResponse.success(distribution));56 }57 58 /**59 * Get average resolution times by category60 */61 @GetMapping("/resolution-times")62 public ResponseEntity<ApiResponse<Map<String, Double>>> getResolutionTimes() {63 Map<String, Double> times = analyticsService.getResolutionTimes();64 return ResponseEntity.ok(ApiResponse.success(times));65 }66 67 /**68 * Get hotspot data for heatmap69 */70 @GetMapping("/hotspots")71 public ResponseEntity<ApiResponse<List<AnalyticsResponse.HotspotData>>> getHotspots() {72 List<AnalyticsResponse.HotspotData> hotspots = analyticsService.getHotspotData();73 return ResponseEntity.ok(ApiResponse.success(hotspots));74 }75}76 