using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using ErsatzTV.Application.ProgramSchedules; using ErsatzTV.Application.ProgramSchedules.Commands; using ErsatzTV.Application.ProgramSchedules.Queries; using ErsatzTV.Extensions; using MediatR; using Microsoft.AspNetCore.Mvc; namespace ErsatzTV.Controllers.Api { [ApiController] [Route("api/schedules")] [Produces("application/json")] public class ProgramScheduleController : ControllerBase { private readonly IMediator _mediator; public ProgramScheduleController(IMediator mediator) => _mediator = mediator; [HttpPost] [ProducesResponseType(typeof(ProgramScheduleViewModel), 200)] [ProducesResponseType(400)] public Task Add( [Required] [FromBody] CreateProgramSchedule createProgramSchedule) => _mediator.Send(createProgramSchedule).ToActionResult(); [HttpGet("{programScheduleId}")] [ProducesResponseType(typeof(ProgramScheduleViewModel), 200)] [ProducesResponseType(404)] public Task Get(int programScheduleId) => _mediator.Send(new GetProgramScheduleById(programScheduleId)).ToActionResult(); [HttpGet] [ProducesResponseType(typeof(IEnumerable), 200)] public Task GetAll() => _mediator.Send(new GetAllProgramSchedules()).ToActionResult(); [HttpPatch] [ProducesResponseType(typeof(ProgramScheduleViewModel), 200)] [ProducesResponseType(400)] public Task Update( [Required] [FromBody] UpdateProgramSchedule updateProgramSchedule) => _mediator.Send(updateProgramSchedule).ToActionResult(); [HttpDelete] [ProducesResponseType(200)] [ProducesResponseType(400)] public Task Delete( [Required] [FromBody] DeleteProgramSchedule deleteProgramSchedule) => _mediator.Send(deleteProgramSchedule).ToActionResult(); [HttpGet("{programScheduleId}/items")] [ProducesResponseType(typeof(IEnumerable), 200)] [ProducesResponseType(404)] public Task GetItems(int programScheduleId) => _mediator.Send(new GetProgramScheduleItems(programScheduleId)).ToActionResult(); [HttpPut("{programScheduleId}/items")] [ProducesResponseType(typeof(IEnumerable), 200)] [ProducesResponseType(404)] public Task PutItems( int programScheduleId, [Required] [FromBody] List items) => _mediator.Send(new ReplaceProgramScheduleItems(programScheduleId, items)).ToActionResult(); [HttpDelete("{programScheduleId}/items")] [ProducesResponseType(typeof(IEnumerable), 200)] [ProducesResponseType(404)] public Task DeleteItems(int programScheduleId) => _mediator.Send(new ReplaceProgramScheduleItems(programScheduleId, new List())) .ToActionResult(); [HttpPost("items/add")] [ProducesResponseType(typeof(IEnumerable), 200)] [ProducesResponseType(404)] public Task AddItem( [Required] [FromBody] AddProgramScheduleItem addProgramScheduleItem) => _mediator.Send(addProgramScheduleItem).ToActionResult(); } }