public async Task <ActionResult> DeleteCompetition([Bind(Prefix = "ConfirmDeleteRequest", Include = "RequiredText,ConfirmationText")] MatchingTextConfirmation model) { if (model is null) { throw new ArgumentNullException(nameof(model)); } var viewModel = new DeleteCompetitionViewModel(CurrentPage, Services.UserService) { Competition = await _competitionDataSource.ReadCompetitionByRoute(Request.RawUrl).ConfigureAwait(false), }; viewModel.IsAuthorized = _authorizationPolicy.IsAuthorized(viewModel.Competition); if (viewModel.IsAuthorized[AuthorizedAction.DeleteCompetition] && ModelState.IsValid) { var memberGroup = Services.MemberGroupService.GetById(viewModel.Competition.MemberGroupKey.Value); if (memberGroup != null) { Services.MemberGroupService.Delete(memberGroup); } var currentMember = Members.GetCurrentMember(); await _competitionRepository.DeleteCompetition(viewModel.Competition, currentMember.Key, currentMember.Name).ConfigureAwait(false); _cacheOverride.OverrideCacheForCurrentMember(CacheConstants.CompetitionsPolicyCacheKeyPrefix); viewModel.Deleted = true; } else { var competitionIds = new List <Guid> { viewModel.Competition.CompetitionId.Value }; viewModel.TotalMatches = await _matchDataSource.ReadTotalMatches(new MatchFilter { CompetitionIds = competitionIds, IncludeTournamentMatches = true }).ConfigureAwait(false); viewModel.TotalTeams = await _teamDataSource.ReadTotalTeams(new TeamFilter { CompetitionIds = competitionIds }).ConfigureAwait(false); } viewModel.Metadata.PageTitle = $"Delete {viewModel.Competition.CompetitionName}"; viewModel.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Competitions, Url = new Uri(Constants.Pages.CompetitionsUrl, UriKind.Relative) }); if (!viewModel.Deleted) { viewModel.Breadcrumbs.Add(new Breadcrumb { Name = viewModel.Competition.CompetitionName, Url = new Uri(viewModel.Competition.CompetitionRoute, UriKind.Relative) }); } return(View("DeleteCompetition", viewModel)); }
public async Task <ActionResult> DeleteSeason([Bind(Prefix = "ConfirmDeleteRequest", Include = "RequiredText,ConfirmationText")] MatchingTextConfirmation model) { if (model is null) { throw new ArgumentNullException(nameof(model)); } var viewModel = new DeleteSeasonViewModel(CurrentPage, Services.UserService) { Season = await _seasonDataSource.ReadSeasonByRoute(Request.RawUrl, true).ConfigureAwait(false), }; viewModel.IsAuthorized = _authorizationPolicy.IsAuthorized(viewModel.Season.Competition); // Create a version without circular references before it gets serialised for audit viewModel.Season.Teams = viewModel.Season.Teams.Select(x => new TeamInSeason { Team = x.Team, WithdrawnDate = x.WithdrawnDate }).ToList(); if (viewModel.IsAuthorized[AuthorizedAction.DeleteCompetition] && ModelState.IsValid) { var currentMember = Members.GetCurrentMember(); await _seasonRepository.DeleteSeason(viewModel.Season, currentMember.Key, currentMember.Name).ConfigureAwait(false); viewModel.Deleted = true; } else { viewModel.TotalMatches = await _matchDataSource.ReadTotalMatches(new MatchFilter { SeasonIds = new List <Guid> { viewModel.Season.SeasonId.Value }, IncludeTournamentMatches = true }).ConfigureAwait(false); } viewModel.Metadata.PageTitle = $"Delete {viewModel.Season.SeasonFullNameAndPlayerType()}"; viewModel.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Competitions, Url = new Uri(Constants.Pages.CompetitionsUrl, UriKind.Relative) }); viewModel.Breadcrumbs.Add(new Breadcrumb { Name = viewModel.Season.Competition.CompetitionName, Url = new Uri(viewModel.Season.Competition.CompetitionRoute, UriKind.Relative) }); if (!viewModel.Deleted) { viewModel.Breadcrumbs.Add(new Breadcrumb { Name = viewModel.Season.SeasonName(), Url = new Uri(viewModel.Season.SeasonRoute, UriKind.Relative) }); } return(View("DeleteSeason", viewModel)); }
public async Task <ActionResult> DeleteTournament([Bind(Prefix = "ConfirmDeleteRequest", Include = "RequiredText,ConfirmationText")] MatchingTextConfirmation postedModel) { if (postedModel is null) { throw new ArgumentNullException(nameof(postedModel)); } var model = new DeleteTournamentViewModel(CurrentPage, Services.UserService) { Tournament = await _tournamentDataSource.ReadTournamentByRoute(Request.RawUrl).ConfigureAwait(false), DateTimeFormatter = _dateTimeFormatter }; model.IsAuthorized = _authorizationPolicy.IsAuthorized(model.Tournament); if (model.IsAuthorized[AuthorizedAction.DeleteTournament] && ModelState.IsValid) { var currentMember = Members.GetCurrentMember(); await _tournamentRepository.DeleteTournament(model.Tournament, currentMember.Key, currentMember.Name).ConfigureAwait(false); await _cacheClearer.ClearCacheFor(model.Tournament).ConfigureAwait(false); model.Deleted = true; } else { model.TotalComments = await _commentsDataSource.ReadTotalComments(model.Tournament.TournamentId.Value).ConfigureAwait(false); model.Matches = new MatchListingViewModel(CurrentPage, Services?.UserService) { Matches = await _matchListingDataSource.ReadMatchListings(new MatchFilter { TournamentId = model.Tournament.TournamentId, IncludeTournamentMatches = true, IncludeTournaments = false }, MatchSortOrder.MatchDateEarliestFirst).ConfigureAwait(false) }; } model.Metadata.PageTitle = "Delete " + model.Tournament.TournamentFullNameAndPlayerType(x => _dateTimeFormatter.FormatDate(x, false, false, false)); model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Tournaments, Url = new Uri(Constants.Pages.TournamentsUrl, UriKind.Relative) }); if (!model.Deleted) { model.Breadcrumbs.Add(new Breadcrumb { Name = model.Tournament.TournamentName, Url = new Uri(model.Tournament.TournamentRoute, UriKind.Relative) }); } return(View("DeleteTournament", model)); }
public async Task <ActionResult> DeleteClub([Bind(Prefix = "ConfirmDeleteRequest", Include = "RequiredText,ConfirmationText")] MatchingTextConfirmation model) { if (model is null) { throw new System.ArgumentNullException(nameof(model)); } var viewModel = new DeleteClubViewModel(CurrentPage, Services.UserService) { Club = await _clubDataSource.ReadClubByRoute(Request.RawUrl).ConfigureAwait(false), }; viewModel.IsAuthorized = _authorizationPolicy.IsAuthorized(viewModel.Club); if (viewModel.IsAuthorized[AuthorizedAction.DeleteClub] && ModelState.IsValid) { var memberGroup = Services.MemberGroupService.GetById(viewModel.Club.MemberGroupKey.Value); if (memberGroup != null) { Services.MemberGroupService.Delete(memberGroup); } var currentMember = Members.GetCurrentMember(); await _clubRepository.DeleteClub(viewModel.Club, currentMember.Key, currentMember.Name).ConfigureAwait(false); _cacheOverride.OverrideCacheForCurrentMember(CacheConstants.TeamListingsCacheKeyPrefix); viewModel.Deleted = true; } viewModel.Metadata.PageTitle = $"Delete {viewModel.Club.ClubName}"; viewModel.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Teams, Url = new Uri(Constants.Pages.TeamsUrl, UriKind.Relative) }); if (!viewModel.Deleted) { viewModel.Breadcrumbs.Add(new Breadcrumb { Name = viewModel.Club.ClubName, Url = new Uri(viewModel.Club.ClubRoute, UriKind.Relative) }); } return(View("DeleteClub", viewModel)); }
public async Task <ActionResult> DeleteTeam([Bind(Prefix = "ConfirmDeleteRequest", Include = "RequiredText,ConfirmationText")] MatchingTextConfirmation postedModel) { if (postedModel is null) { throw new ArgumentNullException(nameof(postedModel)); } var model = new DeleteTeamViewModel(CurrentPage, Services.UserService) { Team = await _teamDataSource.ReadTeamByRoute(Request.RawUrl, true).ConfigureAwait(false), }; model.IsAuthorized = _authorizationPolicy.IsAuthorized(model.Team); if (model.IsAuthorized[AuthorizedAction.DeleteTeam] && ModelState.IsValid) { var memberGroup = Services.MemberGroupService.GetById(model.Team.MemberGroupKey.Value); if (memberGroup != null) { Services.MemberGroupService.Delete(memberGroup); } var currentMember = Members.GetCurrentMember(); await _teamRepository.DeleteTeam(model.Team, currentMember.Key, currentMember.Name).ConfigureAwait(false); _cacheOverride.OverrideCacheForCurrentMember(CacheConstants.TeamListingsCacheKeyPrefix); model.Deleted = true; } else { var teamIds = new List <Guid> { model.Team.TeamId.Value }; model.TotalMatches = await _matchDataSource.ReadTotalMatches(new MatchFilter { TeamIds = teamIds, IncludeTournamentMatches = true }).ConfigureAwait(false); model.Team.Players = (await _playerDataSource.ReadPlayerIdentities(new PlayerFilter { TeamIds = teamIds }).ConfigureAwait(false))?.Select(x => new Player { PlayerIdentities = new List <PlayerIdentity> { x } }).ToList(); } model.Metadata.PageTitle = $"Delete {model.Team.TeamName}"; model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Teams, Url = new Uri(Constants.Pages.TeamsUrl, UriKind.Relative) }); if (model.Team.Club != null) { model.Breadcrumbs.Add(new Breadcrumb { Name = model.Team.Club.ClubName, Url = new Uri(model.Team.Club.ClubRoute, UriKind.Relative) }); } if (!model.Deleted) { model.Breadcrumbs.Add(new Breadcrumb { Name = model.Team.TeamName, Url = new Uri(model.Team.TeamRoute, UriKind.Relative) }); } return(View("DeleteTeam", model)); }
public async Task <ActionResult> DeleteMatch([Bind(Prefix = "ConfirmDeleteRequest", Include = "RequiredText,ConfirmationText")] MatchingTextConfirmation postedModel) { if (postedModel is null) { throw new ArgumentNullException(nameof(postedModel)); } var model = new DeleteMatchViewModel(CurrentPage, Services.UserService) { Match = await _matchDataSource.ReadMatchByRoute(Request.RawUrl).ConfigureAwait(false), DateTimeFormatter = _dateTimeFormatter }; model.IsAuthorized = _authorizationPolicy.IsAuthorized(model.Match); if (model.IsAuthorized[AuthorizedAction.DeleteMatch] && ModelState.IsValid) { var currentMember = Members.GetCurrentMember(); await _matchRepository.DeleteMatch(model.Match, currentMember.Key, currentMember.Name).ConfigureAwait(false); await _cacheClearer.ClearCacheFor(model.Match).ConfigureAwait(false); model.Deleted = true; } else { model.TotalComments = await _matchCommentsDataSource.ReadTotalComments(model.Match.MatchId.Value).ConfigureAwait(false); } model.Metadata.PageTitle = "Delete " + model.Match.MatchFullName(x => _dateTimeFormatter.FormatDate(x, false, false, false)) + " - stoolball match"; if (model.Match.Season != null) { model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Competitions, Url = new Uri(Constants.Pages.CompetitionsUrl, UriKind.Relative) }); model.Breadcrumbs.Add(new Breadcrumb { Name = model.Match.Season.Competition.CompetitionName, Url = new Uri(model.Match.Season.Competition.CompetitionRoute, UriKind.Relative) }); model.Breadcrumbs.Add(new Breadcrumb { Name = model.Match.Season.SeasonName(), Url = new Uri(model.Match.Season.SeasonRoute, UriKind.Relative) }); } else if (model.Match.Tournament != null) { model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Tournaments, Url = new Uri(Constants.Pages.TournamentsUrl, UriKind.Relative) }); model.Breadcrumbs.Add(new Breadcrumb { Name = model.Match.Tournament.TournamentName, Url = new Uri(model.Match.Tournament.TournamentRoute, UriKind.Relative) }); } else { model.Breadcrumbs.Add(new Breadcrumb { Name = Constants.Pages.Matches, Url = new Uri(Constants.Pages.MatchesUrl, UriKind.Relative) }); } if (!model.Deleted) { model.Breadcrumbs.Add(new Breadcrumb { Name = model.Match.MatchName, Url = new Uri(model.Match.MatchRoute, UriKind.Relative) }); } return(View("DeleteMatch", model)); }