From db14f9d2b7d3563fe5e719197194eb51ad3b486e Mon Sep 17 00:00:00 2001 From: luxick Date: Sat, 29 Feb 2020 16:11:42 +0100 Subject: [PATCH] Add GetEpisodes controller --- EstusShots.Client/Routes/Episodes.cs | 7 ++- .../Controllers/EpisodeController.cs | 12 +---- .../Controllers/EpisodesController.cs | 14 ++++++ EstusShots.Server/Services/EpisodesService.cs | 12 +++++ .../Interfaces/IEpisodesController.cs | 7 +++ .../Models/Parameters/EpisodeParameters.cs | 44 +++++++++++++++++++ 6 files changed, 83 insertions(+), 13 deletions(-) diff --git a/EstusShots.Client/Routes/Episodes.cs b/EstusShots.Client/Routes/Episodes.cs index d64d3e8..fe4cdc4 100644 --- a/EstusShots.Client/Routes/Episodes.cs +++ b/EstusShots.Client/Routes/Episodes.cs @@ -18,7 +18,10 @@ namespace EstusShots.Client.Routes private string ActionUrl([CallerMemberName]string caller = "") => $"{_client.ApiUrl}{nameof(Episodes)}/{caller}"; - public async Task> GetEpisodes(GetEpisodesParameter parameter) - => await _client.PostToApi(ActionUrl(), parameter); + public async Task> GetEpisodes(GetEpisodesParameter parameter) => + await _client.PostToApi(ActionUrl(), parameter); + + public async Task> GetEpisode(GetEpisodeParameter parameter) => + await _client.PostToApi(ActionUrl(), parameter); } } \ No newline at end of file diff --git a/EstusShots.Server/Controllers/EpisodeController.cs b/EstusShots.Server/Controllers/EpisodeController.cs index 776bf3f..1088798 100644 --- a/EstusShots.Server/Controllers/EpisodeController.cs +++ b/EstusShots.Server/Controllers/EpisodeController.cs @@ -22,16 +22,6 @@ namespace EstusShots.Server.Controllers _mapper = mapper; _logger = logger; } - - [HttpGet("{id}")] - public async Task> GetEpisode(Guid id) - { - var episode = await _context.Seasons.FindAsync(id); - if (episode == null) {return NotFound();} - - var episodeDto = _mapper.Map(episode); - return episodeDto; - } [HttpPost] public async Task> CreateSeason(Shared.Dto.Episode episodeDto) @@ -46,7 +36,7 @@ namespace EstusShots.Server.Controllers { _logger.LogError(e, "Error while saving object"); } - return CreatedAtAction(nameof(GetEpisode), new {id = episode.EpisodeId}, episode); + return CreatedAtAction("", new {id = episode.EpisodeId}, episode); } } } \ No newline at end of file diff --git a/EstusShots.Server/Controllers/EpisodesController.cs b/EstusShots.Server/Controllers/EpisodesController.cs index 1ed9c1b..537f019 100644 --- a/EstusShots.Server/Controllers/EpisodesController.cs +++ b/EstusShots.Server/Controllers/EpisodesController.cs @@ -35,5 +35,19 @@ namespace EstusShots.Server.Controllers return new ApiResponse(new OperationResult(e)); } } + + public async Task> GetEpisode(GetEpisodeParameter parameter) + { + try + { + _logger.LogInformation($"Request received from client '{Request.HttpContext.Connection.RemoteIpAddress}'"); + return await _episodesService.GetEpisode(parameter); + } + catch (Exception e) + { + _logger.LogError(e, "Exception Occured"); + return new ApiResponse(new OperationResult(e)); + } + } } } \ No newline at end of file diff --git a/EstusShots.Server/Services/EpisodesService.cs b/EstusShots.Server/Services/EpisodesService.cs index befc30c..172f670 100644 --- a/EstusShots.Server/Services/EpisodesService.cs +++ b/EstusShots.Server/Services/EpisodesService.cs @@ -33,5 +33,17 @@ namespace EstusShots.Server.Services _logger.LogInformation($"{dtos.Count} episodes loaded for season '{parameter.SeasonId}'"); return new ApiResponse(new GetEpisodesResponse(dtos)); } + + public async Task> GetEpisode(GetEpisodeParameter parameter) + { + var episode = await _context.Seasons.FindAsync(parameter.EpisodeId); + if (episode == null) + { + _logger.LogWarning($"Episode with ID {parameter.EpisodeId} was not found in database"); + return new ApiResponse(new OperationResult(false, "Episode not found")); + } + var dto = _mapper.Map(episode); + return new ApiResponse(new GetEpisodeResponse(dto)); + } } } \ No newline at end of file diff --git a/EstusShots.Shared/Interfaces/IEpisodesController.cs b/EstusShots.Shared/Interfaces/IEpisodesController.cs index a354628..862773c 100644 --- a/EstusShots.Shared/Interfaces/IEpisodesController.cs +++ b/EstusShots.Shared/Interfaces/IEpisodesController.cs @@ -15,5 +15,12 @@ namespace EstusShots.Shared.Interfaces /// The parameter object /// The GetEpisodes response object Task> GetEpisodes(GetEpisodesParameter parameter); + + /// + /// Load a single episode + /// + /// Parameter object for loading a single episode + /// The GetEpisode response object + Task> GetEpisode(GetEpisodeParameter parameter); } } \ No newline at end of file diff --git a/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs b/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs index 7cc8a6d..4b99110 100644 --- a/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs +++ b/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs @@ -48,4 +48,48 @@ namespace EstusShots.Shared.Models.Parameters Episodes = new List(); } } + + // GetEpisode + + /// + /// Parameter class for loading a single episode + /// + public class GetEpisodeParameter : IApiParameter + { + /// + /// ID of the episode + /// + public Guid EpisodeId { get; set; } + + public GetEpisodeParameter(Guid episodeId) + { + EpisodeId = episodeId; + } + + public GetEpisodeParameter() + { + EpisodeId = Guid.Empty; + } + } + + /// + /// Parameter class returned from the API with a single loaded episode + /// + public class GetEpisodeResponse : IApiResponse + { + /// + /// The loaded episode + /// + public Episode Episode { get; set; } + + public GetEpisodeResponse(Episode episode) + { + Episode = episode; + } + + public GetEpisodeResponse() + { + + } + } } \ No newline at end of file