示例#1
0
        public async Task <IActionResult> InvitePlayer([FromBody] CreateInviteRequest request)
        {
            var currentUser = await _userManager.FindByNameAsync(User.Identity.Name);

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var league = await _fantasyCriticService.GetLeagueByID(request.LeagueID);

            if (league.HasNoValue)
            {
                return(BadRequest());
            }

            if (league.Value.LeagueManager.UserID != currentUser.UserID)
            {
                return(Forbid());
            }

            string            baseURL = $"{Request.Scheme}://{Request.Host.Value}";
            FantasyCriticUser inviteUser;

            if (!request.IsDisplayNameInvite())
            {
                string inviteEmail = request.InviteEmail.ToLower();
                inviteUser = await _userManager.FindByEmailAsync(inviteEmail);

                if (inviteUser is null)
                {
                    Result userlessInviteResult = await _leagueMemberService.InviteUserByEmail(league.Value, inviteEmail);

                    if (userlessInviteResult.IsFailure)
                    {
                        return(BadRequest(userlessInviteResult.Error));
                    }

                    await _emailSender.SendSiteInviteEmail(inviteEmail, league.Value, baseURL);

                    return(Ok());
                }
            }
            else
            {
                inviteUser = await _userManager.FindByDisplayName(request.InviteDisplayName, request.InviteDisplayNumber.Value);
            }

            if (inviteUser is null)
            {
                return(BadRequest("No user is found with that information."));
            }

            Result userInviteResult = await _leagueMemberService.InviteUserByUserID(league.Value, inviteUser);

            if (userInviteResult.IsFailure)
            {
                return(BadRequest(userInviteResult.Error));
            }

            await _emailSender.SendLeagueInviteEmail(inviteUser.EmailAddress, league.Value, baseURL);

            return(Ok());
        }