Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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);
        }