sakthivikram/geo-location
0
1package com.georeport.controller;2 3import com.georeport.dto.ApiResponse;4import com.georeport.dto.IssueResponse;5import com.georeport.dto.UpdateStatusRequest;6import com.georeport.entity.User;7import com.georeport.service.AuthService;8import com.georeport.service.IssueService;9import jakarta.validation.Valid;10import org.springframework.beans.factory.annotation.Autowired;11import org.springframework.http.ResponseEntity;12import org.springframework.security.access.prepost.PreAuthorize;13import org.springframework.web.bind.annotation.*;14 15import java.util.List;16import java.util.Map;17 18/**19 * REST Controller for department staff operations.20 * Each department sees ONLY their own complaints.21 * Accessible to users with ROLE_ADMIN or ROLE_DEPARTMENT.22 */23@RestController24@RequestMapping("/api/department")25@CrossOrigin(origins = "*")26public class DepartmentController {27 28 @Autowired29 private IssueService issueService;30 31 @Autowired32 private AuthService authService;33 34 /**35 * Get complaints for a specific department.36 * Filters issues strictly by department name.37 * GET /api/department/issues?dept=Road+Department38 */39 @GetMapping("/issues")40 @PreAuthorize("hasAnyRole('ADMIN', 'DEPARTMENT')")41 public ResponseEntity<ApiResponse<List<IssueResponse>>> getIssuesByDepartment(42 @RequestParam String dept) {43 List<IssueResponse> issues = issueService.getIssuesByDepartment(dept);44 return ResponseEntity.ok(ApiResponse.success(issues));45 }46 47 /**48 * Update issue status (by department staff).49 * PUT /api/department/issues/{id}/status50 */51 @PutMapping("/issues/{id}/status")52 @PreAuthorize("hasAnyRole('ADMIN', 'DEPARTMENT')")53 public ResponseEntity<ApiResponse<IssueResponse>> updateIssueStatus(54 @PathVariable Long id,55 @Valid @RequestBody UpdateStatusRequest request) {56 User currentUser = authService.getCurrentUser();57 IssueResponse response = issueService.updateIssueStatus(id, request, currentUser);58 return ResponseEntity.ok(ApiResponse.success("Status updated successfully", response));59 }60 61 /**62 * Get complaint counts per department (routing stats overview).63 * GET /api/department/stats64 */65 @GetMapping("/stats")66 @PreAuthorize("hasAnyRole('ADMIN', 'DEPARTMENT')")67 public ResponseEntity<ApiResponse<Map<String, Long>>> getDepartmentStats() {68 Map<String, Long> stats = issueService.getDepartmentStats();69 return ResponseEntity.ok(ApiResponse.success(stats));70 }71}72 