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);
                    }
                }
            }
        }
Пример #2
0
 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
     }
Пример #3
0
        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
            });
        }
Пример #4
0
        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);
        }