package io.spring.demo.quotes;
import reactor.core.publisher.Mono;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import static java.time.Duration.ofMillis;
import static org.springframework.http.MediaType.APPLICATION_STREAM_JSON;
import static org.springframework.http.MediaType.TEXT_EVENT_STREAM;
import static org.springframework.web.reactive.function.server.ServerResponse.ok;
@Component
public class QuoteHandler {
private final QuoteGenerator quoteGenerator;
public QuoteHandler(QuoteGenerator quoteGenerator) {
this.quoteGenerator = quoteGenerator;
}
public Mono<ServerResponse> fetchQuotesSSE(ServerRequest request) {
return ok()
.contentType(TEXT_EVENT_STREAM)
.body(this.quoteGenerator.fetchQuoteStream(ofMillis(200)), Quote.class);
}
public Mono<ServerResponse> fetchQuotes(ServerRequest request) {
return ok()
.contentType(APPLICATION_STREAM_JSON)
.body(this.quoteGenerator.fetchQuoteStream(ofMillis(200)), Quote.class);
}
}