PushController.java
package com.oliwier.listmebackend.api;
import com.oliwier.listmebackend.domain.model.User;
import com.oliwier.listmebackend.identity.CurrentUser;
import com.oliwier.listmebackend.notification.WebPushService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/api/push")
@RequiredArgsConstructor
public class PushController {
private final WebPushService webPushService;
@GetMapping("/public-key")
public Map<String, String> getPublicKey() {
return Map.of("publicKey", webPushService.getBrowserPublicKey());
}
@PostMapping("/subscribe")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void subscribe(@CurrentUser User user, @RequestBody SubscribeRequest body) {
webPushService.subscribe(user, body.endpoint(), body.keys().p256dh(), body.keys().auth());
}
@DeleteMapping("/subscribe")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void unsubscribe(@RequestBody UnsubscribeRequest body) {
webPushService.unsubscribe(body.endpoint());
}
public record SubscribeRequest(String endpoint, Keys keys) {
public record Keys(String p256dh, String auth) {}
}
public record UnsubscribeRequest(String endpoint) {}
}