private async Task <Team> DangerouslyCreateTeam(Guid competitionId, DTO.Team.Create teamData, Guid ownerId) { var team = new Team(competitionId, teamData.Name, teamData.Abbreviation); if (teamData.Invites.Any()) { foreach (var invitee in teamData.Invites) { var invite = await this.DangerouslyCreateInvite(team.Id, invitee); if (invite != null) { team.TeamInvites.Add(invite); } } } var competition = await this.context.Competitions.Include(c => c.TeamOwnerRole).FirstOrDefaultAsync(c => c.Id == competitionId); var creatorRole = competition?.TeamOwnerRole; if (creatorRole == null) { throw new NoNullAllowedException("Role cannot be null"); } await this.backgroundWorker.SendMessage(this.queues.Contact, new DTO.Marketing.ContactSync(ownerId), 5); await this.DangerouslyCreateTeamMembership(team, ownerId, creatorRole.Id, "Created Team"); return(team); }
public async Task <Svalbard.OperationResult> CreateTeam([FromBody] DTO.Team.Create payload) { var result = await this.teamService.CreateTeam(this.resourceId, payload); if (result.Success) { return(Ok()); } return(new Svalbard.OperationResult(result.Error)); }
public async Task <ServiceResult> CreateTeam(Guid competitionId, DTO.Team.Create teamData) { var id = this.httpContext.GetUserId(); if (id == null) { throw new NoNullAllowedException("UserId can't be null"); } return(await CreateTeam(competitionId, teamData, id.Value)); }
public async Task <ServiceResult> CreateTeam(Guid competitionId, DTO.Team.Create teamData, Guid userId) { var result = new ServiceResult(); var competition = await this.context.Competitions.FirstOrDefaultAsync(t => t.Id == competitionId); if (competition == null) { result.Error = Shared.ErrorKey.Competition.NotFound; return(result); } // Check if name is taken if (context.Teams.Any(t => string.Equals(teamData.Name, t.Name, StringComparison.CurrentCultureIgnoreCase) && t.CompetitionId == competitionId && t.TeamState != TeamState.Disbanded)) { result.Error = Shared.ErrorKey.Team.NameTaken; return(result); } // Check User Existence var user = await context.UserProfiles.Include(u => u.TeamMemberships).ThenInclude(m => m.Team).FirstOrDefaultAsync(u => u.Id == userId); if (user == null) { result.Error = Shared.ErrorKey.UserProfile.UserNotFound; } // Check if user is already in team for this competition if (user.HasTeam(competitionId)) { result.Error = Shared.ErrorKey.UserProfile.AlreadyInCompetitionTeam; return(result); } var profanityCheck = await this.profanityValidator.Check(teamData.Name); if (profanityCheck.Severity == ProfanityFilterSeverity.Blacklist) { this.slackClient.SendMessage($"[SEVERITY 1] User {user.UserName} ({userId}) tried to create a Team called {teamData.Name} in Competition {competition.Name} ({competition.Id}), we blocked this action", Shared.ExternalResources.Slack.ProfanityFilterChannel); result.Error = Shared.ErrorKey.ProfanityFilter.BlacklistedWord; return(result); } else if (profanityCheck.Severity == ProfanityFilterSeverity.Suspicious) { this.slackClient.SendMessage($"[SEVERITY 2] User {user.UserName} ({userId}) created a Team called {teamData.Name} in Competition {competition.Name} ({competition.Id})", Shared.ExternalResources.Slack.ProfanityFilterChannel); } var team = await this.DangerouslyCreateTeam(competitionId, teamData, user.Id); this.context.Teams.Add(team); foreach (var invite in team.TeamInvites.ToList()) { var message = new DTO.EMail.Message <DTO.EMail.TeamInvite>(invite.Email, TransactionalEmail.TeamInvite, new DTO.EMail.TeamInvite(invite.Id, competition.Id, competition.Name, competition.Slug, team.Id, team.Name, team.Slug)); await this.backgroundWorker.SendMessage(this.queues.Email, message); } this.cacheBreaker.Break(Shared.Cache.Competition.Detail(competition.Id)); result.Succeed(); return(result); }