using Microsoft.AspNetCore.Mvc; using SameBeat.Application.Interfejsy; using SameBeat.Application.Komendy; namespace SameBeat.Api.Controllers; /// /// Minimalny cykl zycia wydarzenia dla hosta: utworz -> start -> stop. Trasa zaczyna sie od /// "api/host", wiec jest automatycznie chroniona [Authorize] przez KonwencjaAutoryzacjiHosta -- /// nie trzeba tu dopisywac atrybutu recznie. /// [ApiController] [Route("api/host/events")] public class HostEventsController : ControllerBase { private readonly ISerwisZarzadzaniaWydarzeniem _serwisZarzadzaniaWydarzeniem; public HostEventsController(ISerwisZarzadzaniaWydarzeniem serwisZarzadzaniaWydarzeniem) { _serwisZarzadzaniaWydarzeniem = serwisZarzadzaniaWydarzeniem; } [HttpPost] public async Task UtworzAsync([FromBody] UtworzWydarzenieKomenda komenda, CancellationToken token) { var wynik = await _serwisZarzadzaniaWydarzeniem.UtworzAsync(komenda, token); if (!wynik.Sukces || wynik.Dane is null) { return BadRequest(new { blad = wynik.Blad }); } return Ok(wynik.Dane); } [HttpPost("{id:guid}/start")] public async Task StartujAsync(Guid id, CancellationToken token) { var wynik = await _serwisZarzadzaniaWydarzeniem.StartujAsync(id, token); if (!wynik.Sukces || wynik.Dane is null) { return NotFound(new { blad = wynik.Blad }); } return Ok(wynik.Dane); } [HttpPost("{id:guid}/stop")] public async Task ZatrzymajAsync(Guid id, CancellationToken token) { var wynik = await _serwisZarzadzaniaWydarzeniem.ZatrzymajAsync(id, token); if (!wynik.Sukces || wynik.Dane is null) { return NotFound(new { blad = wynik.Blad }); } return Ok(wynik.Dane); } }