diff --git a/EstusShots.Client/Routes/Episodes.cs b/EstusShots.Client/Routes/Episodes.cs index fe4cdc4..3d1db78 100644 --- a/EstusShots.Client/Routes/Episodes.cs +++ b/EstusShots.Client/Routes/Episodes.cs @@ -23,5 +23,8 @@ namespace EstusShots.Client.Routes public async Task> GetEpisode(GetEpisodeParameter parameter) => await _client.PostToApi(ActionUrl(), parameter); + + public async Task> SaveEpisode(SaveEpisodeParameter 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 deleted file mode 100644 index 1088798..0000000 --- a/EstusShots.Server/Controllers/EpisodeController.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Threading.Tasks; -using AutoMapper; -using EstusShots.Server.Models; -using EstusShots.Server.Services; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; - -namespace EstusShots.Server.Controllers -{ - [ApiController] - [Route("/api/[controller]")] - public class EpisodeController : ControllerBase - { - private readonly EstusShotsContext _context; - private readonly IMapper _mapper; - private readonly ILogger _logger; - - public EpisodeController(EstusShotsContext context, IMapper mapper, ILogger logger) - { - _context = context; - _mapper = mapper; - _logger = logger; - } - - [HttpPost] - public async Task> CreateSeason(Shared.Dto.Episode episodeDto) - { - var episode = _mapper.Map(episodeDto); - _context.Episodes.Add(episode); - try - { - await _context.SaveChangesAsync(); - } - catch (Exception e) - { - _logger.LogError(e, "Error while saving object"); - } - 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 537f019..5f33fca 100644 --- a/EstusShots.Server/Controllers/EpisodesController.cs +++ b/EstusShots.Server/Controllers/EpisodesController.cs @@ -49,5 +49,19 @@ namespace EstusShots.Server.Controllers return new ApiResponse(new OperationResult(e)); } } + + public async Task> SaveEpisode(SaveEpisodeParameter parameter) + { + try + { + _logger.LogInformation($"Request received from client '{Request.HttpContext.Connection.RemoteIpAddress}'"); + return await _episodesService.SaveEpisode(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 172f670..8e2dcc2 100644 --- a/EstusShots.Server/Services/EpisodesService.cs +++ b/EstusShots.Server/Services/EpisodesService.cs @@ -1,7 +1,9 @@ +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AutoMapper; +using EstusShots.Server.Models; using EstusShots.Shared.Interfaces; using EstusShots.Shared.Models; using EstusShots.Shared.Models.Parameters; @@ -45,5 +47,29 @@ namespace EstusShots.Server.Services var dto = _mapper.Map(episode); return new ApiResponse(new GetEpisodeResponse(dto)); } + + public async Task> SaveEpisode(SaveEpisodeParameter parameter) + { + var episode = _mapper.Map(parameter.Episode); + if (episode.EpisodeId == Guid.Empty) + { + _context.Episodes.Add(episode); + try + { + var count = await _context.SaveChangesAsync(); + _logger.LogInformation($"Updated {count} rows"); + } + catch (Exception e) + { + _logger.LogError(e, "Error while saving object"); + return new ApiResponse(new OperationResult(e)); + } + return new ApiResponse(new SaveEpisodeResponse(episode.EpisodeId)); + } + else + { + throw new NotImplementedException(); + } + } } } \ No newline at end of file diff --git a/EstusShots.Shared/Interfaces/IEpisodesController.cs b/EstusShots.Shared/Interfaces/IEpisodesController.cs index 862773c..d7e5a8c 100644 --- a/EstusShots.Shared/Interfaces/IEpisodesController.cs +++ b/EstusShots.Shared/Interfaces/IEpisodesController.cs @@ -22,5 +22,12 @@ namespace EstusShots.Shared.Interfaces /// Parameter object for loading a single episode /// The GetEpisode response object Task> GetEpisode(GetEpisodeParameter parameter); + + /// + /// Creates or updates an episode object + /// + /// The parameter object + /// The response object + Task> SaveEpisode(SaveEpisodeParameter parameter); } } \ No newline at end of file diff --git a/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs b/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs index 4b99110..766d259 100644 --- a/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs +++ b/EstusShots.Shared/Models/Parameters/EpisodeParameters.cs @@ -92,4 +92,48 @@ namespace EstusShots.Shared.Models.Parameters } } + + // SaveEpisode + + /// + /// Parameter class for creating or updating episode objects + /// + public class SaveEpisodeParameter : IApiParameter + { + /// + /// The new or updated episode + /// + public Episode Episode { get; set; } + + public SaveEpisodeParameter(Episode episode) + { + Episode = episode; + } + + public SaveEpisodeParameter() + { + Episode = new Episode(); + } + } + + /// + /// Parameter class returned from the API after creating or updating an episode + /// + public class SaveEpisodeResponse : IApiResponse + { + /// + /// ID of the created or updated episode + /// + public Guid EpisodeId { get; set; } + + public SaveEpisodeResponse(Guid episodeId) + { + EpisodeId = episodeId; + } + + public SaveEpisodeResponse() + { + + } + } } \ No newline at end of file