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 })); }
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 })); }