Exemple #1
0
        public object Post(MoveTeamToLeagueRequest request)
        {
            var team = Db.SingleById <Team>(request.TeamId);

            var oldLeagueId = team.LeagueId.GetValueOrDefault();

            using (var transaction = Db.BeginTransaction())
            {
                Db.Delete <Match>(sql =>
                                  sql.GuestTeamId == team.Id || sql.HomeTeamId == team.Id && sql.LeagueId == team.LeagueId);

                var targetLeague        = Db.SingleById <League>(request.Id);
                var teamsInTargetLeague = Db.Select <Team>(sql => sql.LeagueId == request.Id);

                var newMatches = MatchFactory.CreateMatchesForMovedTeam(team, teamsInTargetLeague, targetLeague);

                foreach (var match in newMatches)
                {
                    match.LeagueId = targetLeague.Id;
                    Db.Insert(match, true);
                }

                Db.Update <Team>(new { LeagueId = request.Id }, p => p.Id == request.TeamId);
                Db.Update <TableEntry>(new { LeagueId = request.Id },
                                       p => p.TeamId == request.TeamId && p.LeagueId == oldLeagueId);

                StandingsCalculator.Calculate(Db, oldLeagueId);
                StandingsCalculator.Calculate(Db, request.Id);

                transaction.Commit();
            }

            return(null);
        }