Files
criminalmindsapi/server/Controllers/v1/EpisodesController.cs
T

78 lines
3.1 KiB
C#
Raw Normal View History

2022-06-20 23:09:47 -05:00
using Microsoft.AspNetCore.Mvc;
2022-06-19 23:07:59 -05:00
using server.Models;
using server.Persistence.Repositories;
2022-06-20 23:09:47 -05:00
namespace server.Controllers.v1
2022-06-19 23:07:59 -05:00
{
[ApiController]
2022-06-20 23:09:47 -05:00
[ApiVersion("1.0")]
2022-06-19 23:07:59 -05:00
[Route("/api/episodes")]
[Produces("application/json")]
public class EpisodesController : ControllerBase
{
private readonly IEpisodeRepository _episodeRepository;
public EpisodesController(IEpisodeRepository episodeRepository)
{
_episodeRepository = episodeRepository;
}
/// <summary>
/// Gets a collection of episodes.
/// </summary>
/// <param name="filter">Filter parameters passed from query string.</param>
/// <response code="200">Returns the collection of episodes requested.</response>
/// <response code="400">Not a valid request.</response>
/// <response code="500">Failed to get episodes.</response>
/// <returns>Returns a collection of episodes.</returns>
2022-06-20 23:09:47 -05:00
[MapToApiVersion("1.0")]
2022-06-19 23:07:59 -05:00
[HttpGet]
[ProducesResponseType(typeof(List<Episode>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status500InternalServerError)]
2022-06-29 12:35:13 -05:00
public async Task<IActionResult> GetEpisodesAsync([FromQuery] EpisodeFilter? filter)
{
2022-06-19 23:07:59 -05:00
try
{
var seasons = await _episodeRepository.GetEpisodesAsync(filter);
return Ok(seasons);
}
catch (Exception e)
{
Console.WriteLine(e);
2022-06-23 16:43:17 -05:00
return Problem(detail: "Failed to get episodes", statusCode: 500);
2022-06-19 23:07:59 -05:00
}
}
2022-06-21 09:12:48 -05:00
/// <summary>
/// Gets an episode by its number in the series.
/// </summary>
/// <param name="number">The number of the episode in the series.</param>
/// <response code="200">Returns the episode requested.</response>
/// <response code="404">Unable to find an episode with the provided number.</response>
/// <response code="500">Failed to get episode.</response>
/// <returns>Returns the episode requested.</returns>
2022-06-21 09:12:48 -05:00
[MapToApiVersion("1.0")]
[HttpGet("{number:int}")]
[ProducesResponseType(typeof(Episode), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status500InternalServerError)]
2022-06-29 12:35:13 -05:00
public async Task<IActionResult> GetEpisodeByNumberAsync(int number)
2022-06-21 09:12:48 -05:00
{
try
{
var episode = await _episodeRepository.GetEpisodeByNumberAsync(number);
return episode == null ?
Problem(detail: $"Could not find episode {number}", statusCode: 404) :
Ok(episode);
2022-06-21 09:12:48 -05:00
}
catch (Exception e)
{
Console.WriteLine(e);
return Problem(detail: "Failed to get episode", statusCode: 500);
2022-06-21 09:12:48 -05:00
}
}
2022-06-19 23:07:59 -05:00
}
}