public ActionResult <IEnumerable <DataGracz> > Get(int idMecz, int idDruzyna) { var mecz = _DataAccess.GetItem <DataMecz>(idMecz); if (mecz == null) { return(NotFound()); } var druzyna = _DataAccess.GetItem <DataDruzyna>(idDruzyna); if (druzyna == null) { return(NotFound()); } var raport = _DataAccess.GetAll <DataRaport>().FirstOrDefault(r => r.Mecz == mecz); if (raport == null) { raport = new DataRaport() { Mecz = mecz, }; _DataAccess.AddItem(raport); raport = _DataAccess.GetAll <DataRaport>().FirstOrDefault(r => r.Mecz == mecz); } var zawodnicy = _DataAccess.GetAll <DataZawodnik>().Where(z => z.Druzyna == druzyna) .ToList(); if (!zawodnicy.Any()) { return(NotFound()); } var gracze = GetOrCreateDataGraczes(zawodnicy, raport); return(Ok(gracze)); }
private IEnumerable <DataGracz> GetOrCreateDataGraczes(List <DataZawodnik> zawodnicy, DataRaport raport) { var gracze = _DataAccess.GetAll <DataGracz>() .Where(g => g.Raport == raport && zawodnicy.Contains(g.Zawodnik)); var graczeList = gracze.ToList(); if (graczeList.Count == zawodnicy.Count) { return(graczeList); } List <DataZawodnik> missing = zawodnicy.Where( z => graczeList.All(g => g.Zawodnik != z) ).ToList(); graczeList = new List <DataGracz>(missing.Count); foreach (var dataZawodnik in missing) { graczeList.Add(new DataGracz() { Pozycja = dataZawodnik.Pozycja, Raport = raport, Zawodnik = dataZawodnik, }); } foreach (var gracz in graczeList) { _DataAccess.AddItem(gracz); } return(_DataAccess.GetAll <DataGracz>() .Where(g => g.Raport == raport && zawodnicy.Contains(g.Zawodnik))); }