using HackerNet.Application; using HackerNet.Infrastructure.AspNet.Filters; using Microsoft.AspNetCore.Mvc; namespace HackerNet.Api.Controllers; [ApiController] [Route("/api/links")] public class LinksController : ControllerBase { private readonly LinkService _linkService; public LinksController(LinkService linkService) { _linkService = linkService; } /// /// Retourne les derniers liens publiés de la plateforme. /// /// [HttpGet] public ActionResult GetLinks() { return _linkService.GetPublishedLinks(); } /// /// Récupère un lien par son identifiant. /// /// /// [HttpGet("{id:guid}")] // https://docs.microsoft.com/fr-fr/aspnet/core/fundamentals/routing?view=aspnetcore-6.0#route-constraint-reference [CustomExceptionFilter] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult GetLinkDetail(Guid id) { return _linkService.GetLinkDetail(id); } /// /// Publie un nouveau lien sur la plateforme /// /// /// [HttpPost] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status201Created)] public ActionResult PublishLink(PublishLinkCommand cmd) { var id = _linkService.PublishLink(cmd); return CreatedAtAction(nameof(GetLinkDetail), new { id = id }, null); } }