NewsController.java
package com.wavii.controller;
import com.wavii.dto.news.NewsArticleDto;
import com.wavii.service.NewsService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/news")
@RequiredArgsConstructor
@Slf4j
public class NewsController {
private final NewsService newsService;
/**
* GET /api/news
*
* Devuelve articulos de noticias de musica desde NewsData.io.
* Los resultados se cachean 30 minutos para no consumir creditos innecesarios.
*
* Parametros opcionales:
* - q: terminos de busqueda (por defecto "music")
* - language: "es", "en" o vacio para ambos
* - size: numero de articulos (maximo 10, por defecto 6)
*
* Este endpoint es publico: no requiere autenticacion para que la seccion
* de noticias del Home funcione aunque el usuario no este logado.
*/
@GetMapping
public ResponseEntity<List<NewsArticleDto>> getNews(
@RequestParam(defaultValue = "music") String q,
@RequestParam(required = false) String language,
@RequestParam(defaultValue = "6") int size
) {
try {
List<NewsArticleDto> articles = newsService.fetchMusicNews(q, language, size);
return ResponseEntity.ok(articles);
} catch (Exception e) {
log.error("Error fetching news: {}", e.getMessage());
return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).<List<NewsArticleDto>>build();
}
}
}