XuqmGroup-Server/push-service/src/main/java/com/xuqm/push/controller/PushController.java

96 行
3.8 KiB
Java

2026-04-21 22:07:29 +08:00
package com.xuqm.push.controller;
import com.xuqm.common.exception.BusinessException;
2026-04-21 22:07:29 +08:00
import com.xuqm.common.model.ApiResponse;
import com.xuqm.push.entity.DeviceTokenEntity;
import com.xuqm.push.service.PushDispatcher;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
2026-04-21 22:07:29 +08:00
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/push")
public class PushController {
private final PushDispatcher pushDispatcher;
public PushController(PushDispatcher pushDispatcher) {
this.pushDispatcher = pushDispatcher;
}
@PostMapping("/register")
public ResponseEntity<ApiResponse<Void>> register(
@RequestParam String appKey,
@RequestParam String userId,
@RequestParam DeviceTokenEntity.Vendor vendor,
@RequestParam String token,
@RequestParam(required = false) String platform,
@RequestParam(required = false) String deviceId,
@RequestParam(required = false) String brand,
@RequestParam(required = false) String model,
@RequestParam(required = false) String osVersion,
@RequestParam(required = false) String appVersion) {
requireNonBlank(appKey, "appKey");
requireNonBlank(userId, "userId");
requireNonNull(vendor, "vendor");
requireNonBlank(token, "token");
2026-05-07 19:39:42 +08:00
pushDispatcher.registerToken(appKey, userId, vendor, token, platform, deviceId, brand, model, osVersion, appVersion);
2026-04-21 22:07:29 +08:00
return ResponseEntity.ok(ApiResponse.ok());
}
@PostMapping("/receive-push")
public ResponseEntity<ApiResponse<Void>> receivePush(
@RequestParam String appKey,
@RequestParam String userId,
@RequestParam(required = false) String deviceId,
@RequestParam boolean enabled) {
requireNonBlank(appKey, "appKey");
requireNonBlank(userId, "userId");
2026-05-07 19:39:42 +08:00
pushDispatcher.setReceivePush(appKey, userId, deviceId, enabled);
return ResponseEntity.ok(ApiResponse.ok());
}
2026-04-21 22:07:29 +08:00
@PostMapping("/send")
public ResponseEntity<ApiResponse<Void>> send(
@RequestParam String appKey,
@RequestParam String userId,
@RequestParam String title,
@RequestParam String body,
2026-04-21 22:07:29 +08:00
@RequestParam(required = false) String payload) {
requireNonBlank(appKey, "appKey");
requireNonBlank(userId, "userId");
requireNonBlank(title, "title");
requireNonBlank(body, "body");
2026-05-07 19:39:42 +08:00
pushDispatcher.pushToUser(appKey, userId, title, body, payload);
2026-04-21 22:07:29 +08:00
return ResponseEntity.ok(ApiResponse.ok());
}
@DeleteMapping("/unregister")
public ResponseEntity<ApiResponse<Void>> unregister(
@RequestParam String appKey,
@RequestParam String userId,
@RequestParam DeviceTokenEntity.Vendor vendor,
@RequestParam(required = false) String deviceId) {
requireNonBlank(appKey, "appKey");
requireNonBlank(userId, "userId");
requireNonNull(vendor, "vendor");
2026-05-07 19:39:42 +08:00
pushDispatcher.unregisterToken(appKey, userId, vendor, deviceId);
return ResponseEntity.ok(ApiResponse.ok());
}
private static void requireNonBlank(String value, String field) {
if (value == null || value.isBlank()) {
throw new BusinessException(400, field + " 不能为空");
}
}
private static void requireNonNull(Object value, String field) {
if (value == null) {
throw new BusinessException(400, field + " 不能为空");
}
}
2026-04-21 22:07:29 +08:00
}