private static void MapPlayers( Team team, PersonData[] players, ISportsContext sports, IHandler composer) { if (players == null) { return; } if (team.Id > 0) { sports.Entry(team) ?.Collection(b => b.Players) ?.Load(); } var playerActions = players.ToLookup(d => { if (d.Id == null) { return(1); } return(d.Id < 0 ? -1 : 0); }); if (playerActions.Contains(-1)) { var removePlayers = playerActions[-1].SelectMany(tt => team.Players.Where(t => t.Id == -tt.Id)) .ToArray(); foreach (var removePlayer in removePlayers) { team.Players.Remove(removePlayer); } } if (playerActions.Contains(1)) { foreach (var addPlayer in playerActions[1]) { team.Players.Add(composer.Map <Person>(addPlayer)); } } if (playerActions.Contains(0)) { foreach (var player in team.Players) { var data = players.FirstOrDefault(x => x.Id == player.Id); if (data != null) { composer.Map(data, player); } } } }
public async Task <TeamData> Update( UpdateTeam request, ISportsContext sports, IHandler composer) { var entity = (await new QueryTeam.ById(request.Team?.Id ?? throw new ArgumentException("Missing Team Id")) { IncludePlayers = true }
public async Task <TeamResult> Get( GetTeams request, ISportsContext sports, IHandler composer) { var Teams = (await new QueryTeam.ById(request.Ids) { IncludePlayers = request.IncludePlayers }.ExecuteAsync(sports)) .Select(x => composer.Map <TeamData>(x)) .ToArray(); return(new TeamResult { Teams = Teams }); }
public LeagueResult Create( CreateLeague request, ISportsContext sports, IHandler composer) { var result = new LeagueResult { Teams = request.Teams.Select(team => composer.Send(new CreateTeam { Team = team }).Wait()) .ToArray() }; var entries = sports.ChangeTracker?.Entries().ToArray(); var teams = entries?.Select(entry => entry.Entity).OfType <Team>().ToArray(); Assert.IsNotNull(teams); Assert.AreEqual(request.Teams.Length, teams.Length); Assert.IsTrue(entries.All(entry => entry.State == EntityState.Added)); return(result); }
public static Team Map( TeamData data, Team entity, ISportsContext sports, IHandler composer) { entity ??= new Team(); if (data.Name != null) { entity.Name = data.Name; } if (data.Coach != null) { entity.Coach = entity.Coach != null ? composer.MapInto(data.Coach, entity.Coach) : composer.Map <Person>(data.Coach); } MapPlayers(entity, data.Players, sports, composer); return(entity); }