package com.goldenchart.controller; import com.goldenchart.dto.FcmTokenDto; import com.goldenchart.service.FcmPushService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.Map; @RestController @RequestMapping("/fcm") @RequiredArgsConstructor public class FcmController { private final FcmPushService fcmPushService; private Long userId(Map h) { String v = h.get("x-user-id"); return v != null ? Long.parseLong(v) : null; } private String deviceId(Map h) { return h.getOrDefault("x-device-id", "anonymous"); } @PostMapping("/token") public ResponseEntity register(@RequestHeader Map h, @RequestBody FcmTokenDto body) { fcmPushService.registerToken( body.getUserId() != null ? body.getUserId() : userId(h), body.getDeviceId() != null ? body.getDeviceId() : deviceId(h), body.getToken()); return ResponseEntity.ok().build(); } @DeleteMapping("/token") public ResponseEntity delete(@RequestHeader Map h) { fcmPushService.deleteByDevice(deviceId(h)); return ResponseEntity.ok().build(); } @PostMapping("/test") public ResponseEntity> test(@RequestHeader Map h) { fcmPushService.sendTest(userId(h), deviceId(h)); return ResponseEntity.ok(Map.of( "ok", true, "available", fcmPushService.isAvailable() )); } @GetMapping("/status") public ResponseEntity> status() { return ResponseEntity.ok(Map.of("available", fcmPushService.isAvailable())); } }