CoolFace
Apppublic

sakthivikram/geo-location

sourceHugging Faceupdated 5mo agoView on Hugging Face
0likes
AdminController.java113 linesDownload Raw Back to controller
1package com.georeport.controller;2 3import com.georeport.dto.*;4import com.georeport.entity.IssueStatus;5import com.georeport.entity.User;6import com.georeport.service.AuthService;7import com.georeport.service.IssueService;8import jakarta.validation.Valid;9import org.springframework.beans.factory.annotation.Autowired;10import org.springframework.data.domain.Page;11import org.springframework.data.domain.PageRequest;12import org.springframework.data.domain.Pageable;13import org.springframework.data.domain.Sort;14import org.springframework.format.annotation.DateTimeFormat;15import org.springframework.http.ResponseEntity;16import org.springframework.security.access.prepost.PreAuthorize;17import org.springframework.web.bind.annotation.*;18 19import java.time.LocalDateTime;20import java.util.List;21 22/**23 * REST Controller for admin operations.24 * Handles issue management, status updates, and dashboard statistics.25 */26@RestController27@RequestMapping("/api/admin")28@PreAuthorize("hasRole('ADMIN')")29@CrossOrigin(origins = "*")30public class AdminController {31 32    @Autowired33    private IssueService issueService;34 35    @Autowired36    private AuthService authService;37 38    /**39     * Get dashboard statistics40     * GET /api/admin/stats41     */42    @GetMapping("/stats")43    public ResponseEntity<ApiResponse<DashboardStats>> getDashboardStats() {44        DashboardStats stats = issueService.getDashboardStats();45        return ResponseEntity.ok(ApiResponse.success(stats));46    }47 48    /**49     * Get all issues with advanced filters50     * GET /api/admin/issues51     */52    @GetMapping("/issues")53    public ResponseEntity<ApiResponse<Page<IssueResponse>>> getAllIssues(54            @RequestParam(required = false) IssueStatus status,55            @RequestParam(required = false) Long categoryId,56            @RequestParam(required = false) String ward,57            @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,58            @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate,59            @RequestParam(defaultValue = "0") int page,60            @RequestParam(defaultValue = "20") int size,61            @RequestParam(defaultValue = "createdAt") String sortBy,62            @RequestParam(defaultValue = "desc") String sortDir) {63 64        Sort sort = sortDir.equalsIgnoreCase("asc")65                ? Sort.by(sortBy).ascending()66                : Sort.by(sortBy).descending();67        Pageable pageable = PageRequest.of(page, size, sort);68 69        Page<IssueResponse> issues = issueService.getAllIssues(status, categoryId, ward, startDate, endDate, pageable);70        return ResponseEntity.ok(ApiResponse.success(issues));71    }72 73    /**74     * Update issue status75     * PUT /api/admin/issues/{id}/status76     */77    @PutMapping("/issues/{id}/status")78    public ResponseEntity<ApiResponse<IssueResponse>> updateIssueStatus(79            @PathVariable Long id,80            @Valid @RequestBody UpdateStatusRequest request) {81 82        User admin = authService.getCurrentUser();83        IssueResponse response = issueService.updateIssueStatus(id, request, admin);84        return ResponseEntity.ok(ApiResponse.success("Status updated successfully", response));85    }86 87    /**88     * Get issues by status89     * GET /api/admin/issues/by-status/{status}90     */91    @GetMapping("/issues/by-status/{status}")92    public ResponseEntity<ApiResponse<Page<IssueResponse>>> getIssuesByStatus(93            @PathVariable IssueStatus status,94            @RequestParam(defaultValue = "0") int page,95            @RequestParam(defaultValue = "20") int size) {96 97        Pageable pageable = PageRequest.of(page, size, Sort.by("createdAt").descending());98        Page<IssueResponse> issues = issueService.getAllIssues(status, null, null, null, null, pageable);99        return ResponseEntity.ok(ApiResponse.success(issues));100    }101 102    /**103     * Get available wards104     * GET /api/admin/wards105     */106    @GetMapping("/wards")107    public ResponseEntity<ApiResponse<List<String>>> getWards() {108        DashboardStats stats = issueService.getDashboardStats();109        List<String> wards = stats.getIssuesByWard().keySet().stream().sorted().toList();110        return ResponseEntity.ok(ApiResponse.success(wards));111    }112}113