private async Task <Result> ValidateAndGenerateResultAsync(PostResultRequest toAdd) { var season = Season.FromISOString(toAdd.Season); var standing = await _dbContext.Standings .Include(s => s.ResultsDuringTheSeason) .Include(s => s.League) .ThenInclude(l => l.Teams) .SingleOrDefaultAsync(s => s.SeasonId == season.FullName && s.LeagueId == toAdd.LeagueName); bool standingExists = standing != null; if (!standingExists) { throw new ArgumentException("Can't add the given result as there is no such standing that corresponds to this combination of year/league"); } var homeTeamEntity = standing.League.Teams.FirstOrDefault( t => t.Name.Equals(toAdd.HomeTeamName)); var awayTeamEntity = standing.League.Teams.FirstOrDefault( t => t.Name.Equals(toAdd.AwayTeamName)); if (homeTeamEntity == null || awayTeamEntity == null) { throw new ArgumentException("One of the teams, part of this result, does not exist"); } var entityToAdd = Result.FromRequest(toAdd); entityToAdd.HomeTeam = homeTeamEntity; entityToAdd.AwayTeam = awayTeamEntity; return(entityToAdd); }
public async Task <(string, ResultDTO)> AddAsync(PostResultRequest toAdd) { var result = await ValidateAndGenerateResultAsync(toAdd); var resultAsDto = result.ToDto(); await _standingsService.UpdateMatchAsync(resultAsDto, false); return("todo: generate URL", resultAsDto); }
public async Task <ActionResult> PostResult(PostResultRequest postResultRequest) { { try { var result = await _resultService.AddAsync(postResultRequest); return(Created(result.url, result.createdDto)); } catch (ArgumentException aEx) { return(BadRequest(aEx.Message)); } } }