diff --git a/server/Controllers/v1/EpisodesController.cs b/server/Controllers/v1/EpisodesController.cs index 098bc67..2140d50 100644 --- a/server/Controllers/v1/EpisodesController.cs +++ b/server/Controllers/v1/EpisodesController.cs @@ -20,9 +20,10 @@ namespace server.Controllers.v1 [MapToApiVersion("1.0")] [HttpGet] [ProducesResponseType(typeof(List), 200)] - [ProducesResponseType(500)] + [ProducesResponseType(typeof(ValidationProblemDetails), 400)] + [ProducesResponseType(typeof(ProblemDetails), 500)] public async Task>> GetEpisodesAsync([FromQuery] EpisodeFilter? filter) - { + { try { var seasons = await _episodeRepository.GetEpisodesAsync(filter); @@ -31,29 +32,30 @@ namespace server.Controllers.v1 catch (Exception e) { Console.WriteLine(e); - return StatusCode(StatusCodes.Status500InternalServerError, "Failed to get episodes"); + return Problem(detail: "Failed to get episode", statusCode: 500); } } [MapToApiVersion("1.0")] [HttpGet("{number:int}")] [ProducesResponseType(typeof(Episode), 200)] - [ProducesResponseType(500)] + [ProducesResponseType(typeof(ValidationProblemDetails), 400)] + [ProducesResponseType(typeof(ProblemDetails), 404)] + [ProducesResponseType(typeof(ProblemDetails), 500)] public async Task> GetEpisodeByNumberAsync(int number) { - try { var episode = await _episodeRepository.GetEpisodeByNumberAsync(number); - if (episode == null) return NotFound(new ErrorResponse($"Could not find episode number {number}")); + if (episode == null) return Problem(detail: $"Could not find episode {number}", statusCode: 404); return Ok(episode); } catch (Exception e) { Console.WriteLine(e); - return StatusCode(StatusCodes.Status500InternalServerError, "Failed to get season"); + return Problem(detail: "Failed to get episode", statusCode: 500); } } } diff --git a/server/Controllers/v1/SeasonsController.cs b/server/Controllers/v1/SeasonsController.cs index c294c74..1280ae4 100644 --- a/server/Controllers/v1/SeasonsController.cs +++ b/server/Controllers/v1/SeasonsController.cs @@ -20,7 +20,7 @@ namespace server.Controllers.v1 [MapToApiVersion("1.0")] [HttpGet] [ProducesResponseType(typeof(List), 200)] - [ProducesResponseType(500)] + [ProducesResponseType(typeof(ProblemDetails), 500)] public async Task>> GetSeasonsAsync() { try @@ -31,29 +31,30 @@ namespace server.Controllers.v1 catch (Exception e) { Console.WriteLine(e); - return StatusCode(StatusCodes.Status500InternalServerError, "Failed to get seasons"); + return Problem(detail: "Failed to get season", statusCode: 500); } } [MapToApiVersion("1.0")] [HttpGet("{number:int}")] [ProducesResponseType(typeof(Season), 200)] - [ProducesResponseType(typeof(ErrorResponse), 404)] - [ProducesResponseType(500)] + [ProducesResponseType(typeof(ValidationProblemDetails), 400)] + [ProducesResponseType(typeof(ProblemDetails), 404)] + [ProducesResponseType(typeof(ProblemDetails),500)] public async Task> GetSeasonByNumberAsync(int number) { try { var season = await _seasonRepository.GetSeasonByNumberAsync(number); - if (season == null) return NotFound(new ErrorResponse($"Could not find season number {number}")); + if (season == null) return Problem(detail: $"Could not find season {number}", statusCode: 404); return Ok(season); } catch (Exception e) { Console.WriteLine(e); - return StatusCode(StatusCodes.Status500InternalServerError, "Failed to get season"); + return Problem(detail: "Failed to get season", statusCode: 500); } } } diff --git a/server/Models/EpisodeFilter.cs b/server/Models/EpisodeFilter.cs index ab91c92..2d7312b 100644 --- a/server/Models/EpisodeFilter.cs +++ b/server/Models/EpisodeFilter.cs @@ -9,5 +9,7 @@ namespace server.Models public class EpisodeFilter { public int? Season { get; set; } = null; + public DateTime? StartDate { get; set; } = null; + public DateTime? EndDate { get; set; } = null; } } diff --git a/server/Models/ErrorResponse.cs b/server/Models/ErrorResponse.cs deleted file mode 100644 index 84cf43a..0000000 --- a/server/Models/ErrorResponse.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace server.Models -{ - public class ErrorResponse - { - public string Error { get; set; } - - public ErrorResponse(string error) - { - Error = error; - } - } -} diff --git a/server/Persistence/Repositories/EpisodeRepository.cs b/server/Persistence/Repositories/EpisodeRepository.cs index 18864de..275d996 100644 --- a/server/Persistence/Repositories/EpisodeRepository.cs +++ b/server/Persistence/Repositories/EpisodeRepository.cs @@ -24,6 +24,16 @@ namespace server.Persistence.Repositories query = query.Where(episode => episode.Season == filter.Season); } + if (filter?.StartDate != null) + { + query = query.Where(episode => episode.AirDate >= filter.StartDate); + } + + if (filter?.EndDate != null) + { + query = query.Where(episode => episode.AirDate <= filter.EndDate); + } + return await query.ToListAsync(); } catch (Exception e)