public async Task <IActionResult> SetRoundResults([FromRoute] short year, [FromRoute] byte season, [FromRoute] byte round, [FromBody] IList <MatchResultRequest> matchesResults) { try { var teams = (await _teamsService.GetYearTeamsAsync(year)).ToDictionary(team => team.Abbreviation.ToLowerInvariant(), team => team); foreach (var match in matchesResults) { if (!teams.ContainsKey(match.HomeTeamAbbr.ToLowerInvariant()) || !teams.ContainsKey(match.AwayTeamAbbr.ToLowerInvariant())) { throw new ArgumentException($"Teams not found for match {match.HomeTeamAbbr}-{match.AwayTeamAbbr}."); } match.HomeTeamId = teams[match.HomeTeamAbbr.ToLowerInvariant()].Id; match.AwayTeamId = teams[match.AwayTeamAbbr.ToLowerInvariant()].Id; match.HomeTeamName = teams[match.HomeTeamAbbr.ToLowerInvariant()].Name; match.AwayTeamName = teams[match.AwayTeamAbbr.ToLowerInvariant()].Name; } } catch (Exception ex) { _logger.LogError($"Error matching teams.", ex); return(StatusCode(StatusCodes.Status500InternalServerError, "Error matching teams.")); } try { await _matchesService.SetRoundResults(year, season, round, _mapper.Map <IList <Match> >(matchesResults, opt => { opt.Items["year"] = year; opt.Items["season"] = season; opt.Items["round"] = round; })); _logger.LogDebug($"{matchesResults.Count} matches results set for {year}:{season}:{round}."); return(Ok()); } catch (Exception ex) { _logger.LogError($"Error bulk adding matches.", ex); return(StatusCode(StatusCodes.Status500InternalServerError, "Error adding matches.")); } }