Exemplo n.º 1
0
        public async Task <IActionResult> SubscriptionInitial(int id, SubscriptionInitialViewModel vm)
        {
            var match = await _context.Matchs.Include(m => m.Sides).FirstOrDefaultAsync(m => m.MatchID == id);

            if (match == null)
            {
                return(NotFound());
            }
            if (match.State != MatchState.Open)
            {
                return(RedirectToAction(nameof(Details), new { id }));
            }

            if (!vm.AcceptMatchRules)
            {
                ModelState.AddModelError("AcceptMatchRules", "Vous devez accepter le réglement de l'opération");
            }

            if (!vm.AcceptSubscription)
            {
                ModelState.AddModelError("AcceptSubscription", "Vous devez accepter le traitement des données nécessaires à votre inscription");
            }

            if (!ModelState.IsValid)
            {
                vm.Match = match;
                return(View("SubscriptionInitial", vm));
            }

            using (var transaction = await _context.Database.BeginTransactionAsync())
            {
                var user = await GetUser();

                if (user == null)
                {
                    vm.User.SteamId   = UserHelper.GetSteamId(User);
                    vm.User.SteamName = User.Identity.Name;
                    vm.User.UserID    = 0;
                    _context.Add(vm.User);
                    await _context.SaveChangesAsync();

                    user = vm.User;
                }

                var matchUser = await _context.MatchUsers.FirstOrDefaultAsync(u => u.MatchID == id && u.UserID == user.UserID);

                if (matchUser == null)
                {
                    if (vm.RoundSquadID != null)
                    {
                        // Vérifie que RoundSquadID appartient bien à MatchID
                        vm.RoundSquadID = await _context.RoundSquads.Where(s => s.RoundSquadID == vm.RoundSquadID && s.Side.MatchSide.MatchID == id).Select(s => s.RoundSquadID).FirstOrDefaultAsync();

                        // Calcule MatchSideID
                        vm.MatchSideID = await _context.RoundSquads.Where(s => s.RoundSquadID == vm.RoundSquadID && s.Side.MatchSide.MatchID == id).Select(s => s.Side.MatchSideID).FirstOrDefaultAsync();
                    }
                    else if (vm.MatchSideID != null)
                    {
                        // Vérifie que MatchSideID appartient bien à MatchID
                        vm.MatchSideID = await _context.MatchSides.Where(s => s.MatchSideID == vm.MatchSideID && s.MatchID == id).Select(s => s.MatchSideID).FirstOrDefaultAsync();
                    }
                    else
                    {
                        if (await _context.MatchSides.CountAsync(s => s.MatchID == id) == 1)
                        {
                            vm.MatchSideID = (await _context.MatchSides.FirstAsync(s => s.MatchID == id)).MatchSideID;
                        }
                    }
                    matchUser = new MatchUser()
                    {
                        MatchID = id, UserID = vm.User.UserID, MatchSideID = vm.MatchSideID
                    };
                    if (matchUser.MatchSideID == null || await CanJoin(matchUser))
                    {
                        _context.Add(matchUser);
                        await _context.SaveChangesAsync();
                    }
                }
                await transaction.CommitAsync();
            }
            return(RedirectToAction(nameof(Subscription), new { id }));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> SubscriptionInitial(int id, SubscriptionInitialViewModel vm)
        {
            var match = await _context.Matchs.Include(m => m.Sides).FirstOrDefaultAsync(m => m.MatchID == id);

            if (match == null)
            {
                return(NotFound());
            }

            if (!ModelState.IsValid)
            {
                vm.Match = match;
                return(View("SubscriptionInitial", vm));
            }

            using (var transaction = await _context.Database.BeginTransactionAsync())
            {
                var user = await GetUser();

                if (user == null)
                {
                    vm.User.SteamId   = SteamHelper.GetSteamId(User);
                    vm.User.SteamName = User.Identity.Name;
                    vm.User.Name      = vm.User.NamePrefix + User.Identity.Name;
                    vm.User.UserID    = 0;
                    _context.Add(vm.User);
                    await _context.SaveChangesAsync();

                    user = vm.User;
                }

                var matchUser = await _context.MatchUsers.FirstOrDefaultAsync(u => u.MatchID == id && u.UserID == user.UserID);

                if (matchUser == null)
                {
                    if (vm.RoundSquadID != null)
                    {
                        // Vérifie que RoundSquadID appartient bien à MatchID
                        vm.RoundSquadID = await _context.RoundSquads.Where(s => s.RoundSquadID == vm.RoundSquadID && s.Side.MatchSide.MatchID == id).Select(s => s.RoundSquadID).FirstOrDefaultAsync();

                        // Calcule MatchSideID
                        vm.MatchSideID = await _context.RoundSquads.Where(s => s.RoundSquadID == vm.RoundSquadID && s.Side.MatchSide.MatchID == id).Select(s => s.Side.MatchSideID).FirstOrDefaultAsync();
                    }
                    else if (vm.MatchSideID != null)
                    {
                        // Vérifie que MatchSideID appartient bien à MatchID
                        vm.MatchSideID = await _context.MatchSides.Where(s => s.MatchSideID == vm.MatchSideID && s.MatchID == id).Select(s => s.MatchSideID).FirstOrDefaultAsync();
                    }
                    matchUser = new MatchUser()
                    {
                        MatchID = id, UserID = vm.User.UserID, MatchSideID = vm.MatchSideID
                    };
                    if (matchUser.MatchSideID == null || await CanJoin(matchUser))
                    {
                        _context.Add(matchUser);
                        await _context.SaveChangesAsync();
                    }
                }
                await transaction.CommitAsync();
            }
            return(RedirectToAction(nameof(Subscription), new { id }));
        }