Add GetEpisodes controller

This commit is contained in:
2020-02-29 16:11:42 +01:00
parent 54c0fb2fd2
commit db14f9d2b7
6 changed files with 83 additions and 13 deletions

View File

@@ -18,7 +18,10 @@ namespace EstusShots.Client.Routes
private string ActionUrl([CallerMemberName]string caller = "") => private string ActionUrl([CallerMemberName]string caller = "") =>
$"{_client.ApiUrl}{nameof(Episodes)}/{caller}"; $"{_client.ApiUrl}{nameof(Episodes)}/{caller}";
public async Task<ApiResponse<GetEpisodesResponse>> GetEpisodes(GetEpisodesParameter parameter) public async Task<ApiResponse<GetEpisodesResponse>> GetEpisodes(GetEpisodesParameter parameter) =>
=> await _client.PostToApi<GetEpisodesResponse, GetEpisodesParameter>(ActionUrl(), parameter); await _client.PostToApi<GetEpisodesResponse, GetEpisodesParameter>(ActionUrl(), parameter);
public async Task<ApiResponse<GetEpisodeResponse>> GetEpisode(GetEpisodeParameter parameter) =>
await _client.PostToApi<GetEpisodeResponse, GetEpisodeParameter>(ActionUrl(), parameter);
} }
} }

View File

@@ -23,16 +23,6 @@ namespace EstusShots.Server.Controllers
_logger = logger; _logger = logger;
} }
[HttpGet("{id}")]
public async Task<ActionResult<Shared.Dto.Episode>> GetEpisode(Guid id)
{
var episode = await _context.Seasons.FindAsync(id);
if (episode == null) {return NotFound();}
var episodeDto = _mapper.Map<Shared.Dto.Episode>(episode);
return episodeDto;
}
[HttpPost] [HttpPost]
public async Task<ActionResult<Shared.Dto.Episode>> CreateSeason(Shared.Dto.Episode episodeDto) public async Task<ActionResult<Shared.Dto.Episode>> CreateSeason(Shared.Dto.Episode episodeDto)
{ {
@@ -46,7 +36,7 @@ namespace EstusShots.Server.Controllers
{ {
_logger.LogError(e, "Error while saving object"); _logger.LogError(e, "Error while saving object");
} }
return CreatedAtAction(nameof(GetEpisode), new {id = episode.EpisodeId}, episode); return CreatedAtAction("", new {id = episode.EpisodeId}, episode);
} }
} }
} }

View File

@@ -35,5 +35,19 @@ namespace EstusShots.Server.Controllers
return new ApiResponse<GetEpisodesResponse>(new OperationResult(e)); return new ApiResponse<GetEpisodesResponse>(new OperationResult(e));
} }
} }
public async Task<ApiResponse<GetEpisodeResponse>> 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<GetEpisodeResponse>(new OperationResult(e));
}
}
} }
} }

View File

@@ -33,5 +33,17 @@ namespace EstusShots.Server.Services
_logger.LogInformation($"{dtos.Count} episodes loaded for season '{parameter.SeasonId}'"); _logger.LogInformation($"{dtos.Count} episodes loaded for season '{parameter.SeasonId}'");
return new ApiResponse<GetEpisodesResponse>(new GetEpisodesResponse(dtos)); return new ApiResponse<GetEpisodesResponse>(new GetEpisodesResponse(dtos));
} }
public async Task<ApiResponse<GetEpisodeResponse>> 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<GetEpisodeResponse>(new OperationResult(false, "Episode not found"));
}
var dto = _mapper.Map<Dto.Episode>(episode);
return new ApiResponse<GetEpisodeResponse>(new GetEpisodeResponse(dto));
}
} }
} }

View File

@@ -15,5 +15,12 @@ namespace EstusShots.Shared.Interfaces
/// <param name="parameter">The parameter object</param> /// <param name="parameter">The parameter object</param>
/// <returns>The GetEpisodes response object</returns> /// <returns>The GetEpisodes response object</returns>
Task<ApiResponse<GetEpisodesResponse>> GetEpisodes(GetEpisodesParameter parameter); Task<ApiResponse<GetEpisodesResponse>> GetEpisodes(GetEpisodesParameter parameter);
/// <summary>
/// Load a single episode
/// </summary>
/// <param name="parameter">Parameter object for loading a single episode</param>
/// <returns>The GetEpisode response object</returns>
Task<ApiResponse<GetEpisodeResponse>> GetEpisode(GetEpisodeParameter parameter);
} }
} }

View File

@@ -48,4 +48,48 @@ namespace EstusShots.Shared.Models.Parameters
Episodes = new List<Episode>(); Episodes = new List<Episode>();
} }
} }
// GetEpisode
/// <summary>
/// Parameter class for loading a single episode
/// </summary>
public class GetEpisodeParameter : IApiParameter
{
/// <summary>
/// ID of the episode
/// </summary>
public Guid EpisodeId { get; set; }
public GetEpisodeParameter(Guid episodeId)
{
EpisodeId = episodeId;
}
public GetEpisodeParameter()
{
EpisodeId = Guid.Empty;
}
}
/// <summary>
/// Parameter class returned from the API with a single loaded episode
/// </summary>
public class GetEpisodeResponse : IApiResponse
{
/// <summary>
/// The loaded episode
/// </summary>
public Episode Episode { get; set; }
public GetEpisodeResponse(Episode episode)
{
Episode = episode;
}
public GetEpisodeResponse()
{
}
}
} }