diff --git a/server/Controllers/v1/EpisodesController.cs b/server/Controllers/v1/EpisodesController.cs index 5c024aa..098bc67 100644 --- a/server/Controllers/v1/EpisodesController.cs +++ b/server/Controllers/v1/EpisodesController.cs @@ -34,5 +34,27 @@ namespace server.Controllers.v1 return StatusCode(StatusCodes.Status500InternalServerError, "Failed to get episodes"); } } + + [MapToApiVersion("1.0")] + [HttpGet("{number:int}")] + [ProducesResponseType(typeof(Episode), 200)] + [ProducesResponseType(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}")); + + return Ok(episode); + } + catch (Exception e) + { + Console.WriteLine(e); + return StatusCode(StatusCodes.Status500InternalServerError, "Failed to get season"); + } + } } } diff --git a/server/Persistence/Repositories/EpisodeRepository.cs b/server/Persistence/Repositories/EpisodeRepository.cs index bed2bdb..18864de 100644 --- a/server/Persistence/Repositories/EpisodeRepository.cs +++ b/server/Persistence/Repositories/EpisodeRepository.cs @@ -32,5 +32,18 @@ namespace server.Persistence.Repositories throw; } } + + public async Task GetEpisodeByNumberAsync(int number) + { + try + { + return await _context.Episodes.Find(episode => episode.NumberInSeries == number).SingleOrDefaultAsync(); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + } } } diff --git a/server/Persistence/Repositories/IEpisodeRepository.cs b/server/Persistence/Repositories/IEpisodeRepository.cs index 6e6a8f0..7865668 100644 --- a/server/Persistence/Repositories/IEpisodeRepository.cs +++ b/server/Persistence/Repositories/IEpisodeRepository.cs @@ -10,5 +10,6 @@ namespace server.Persistence.Repositories public interface IEpisodeRepository { Task> GetEpisodesAsync(EpisodeFilter filter); + Task GetEpisodeByNumberAsync(int number); } } diff --git a/server/Properties/launchSettings.json b/server/Properties/launchSettings.json index d2eb249..7274ee1 100644 --- a/server/Properties/launchSettings.json +++ b/server/Properties/launchSettings.json @@ -11,6 +11,7 @@ "profiles": { "server": { "commandName": "Project", + "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development"