private async Task InitializeParticipantsAsync(TournamentRegistrationRules rules, TournamentTeam team) { // Determine participants' status var initStatus = rules.Rules.HasFlag(RegistrationRules.RequireInvitationAccept) ? ParticipantStatus.Invited : ParticipantStatus.Accepted; foreach (var participant in team.Participants) { // Set participant's status if it is default (Invited) // TODO: create default status if (participant.Status == ParticipantStatus.Invited) { participant.Status = initStatus; } // Verify the player doesn't already belong to a team if (initStatus == ParticipantStatus.Accepted && await Context.TournamentParticipants .Include(p => p.Team) .Where(p => p.Team.TournamentId == team.TournamentId && p.Team.TeamId != team.TeamId && p.PlayerId == participant.PlayerId && p.Status == ParticipantStatus.Accepted) .AnyAsync()) { throw new ArgumentException($"{participant.Player?.Nickname ?? "One of these players"} already belongs to another team."); } } }
public TournamentRegistrationRulesValidator(TournamentRegistrationRules rules) { if (rules is null) { throw new ArgumentNullException(nameof(rules)); } _rules = rules; }