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);
}
}