package com.xuqm.push.controller; import com.xuqm.common.model.ApiResponse; import com.xuqm.push.entity.DeviceLoginLogEntity; import com.xuqm.push.service.PushDiagnosticsService; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController @RequestMapping("/api/push/admin") public class PushManagementController { private final PushDiagnosticsService diagnosticsService; public PushManagementController(PushDiagnosticsService diagnosticsService) { this.diagnosticsService = diagnosticsService; } @GetMapping("/user-status") public ResponseEntity> userStatus( @RequestParam String appId, @RequestParam String userId) { return ResponseEntity.ok(ApiResponse.success(diagnosticsService.searchByUserId(appId, userId))); } @GetMapping("/device-logs") public ResponseEntity>> deviceLogs( @RequestParam String appId, @RequestParam String userId, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "20") int size) { Page result = diagnosticsService.deviceLogs(appId, userId, page, size); return ResponseEntity.ok(ApiResponse.success(Map.of( "content", result.getContent(), "total", result.getTotalElements(), "totalPages", result.getTotalPages() ))); } @PostMapping("/test-offline") public ResponseEntity> testOffline( @RequestBody TestOfflineRequest request) { PushDiagnosticsService.TestPushResult result = diagnosticsService.sendTestOfflineMessage( request.appId(), request.userId(), request.title(), request.body(), request.payload()); return ResponseEntity.ok(ApiResponse.success(result)); } public record TestOfflineRequest( String appId, String userId, String title, String body, String payload ) {} }