Ejemplo n.º 1
0
 public PublisherUserRelationship(LeagueYearUserRelationship leagueYearRelationship, bool isPublisher)
 {
     InvitedToLeague = leagueYearRelationship.InvitedToLeague;
     InLeague        = leagueYearRelationship.InLeague;
     ActiveInYear    = leagueYearRelationship.ActiveInYear;
     LeagueManager   = leagueYearRelationship.LeagueManager;
     IsAdmin         = leagueYearRelationship.IsAdmin;
     IsPublisher     = isPublisher;
 }
Ejemplo n.º 2
0
    protected async Task <GenericResultRecord <LeagueYearRecord> > GetExistingLeagueYear(Guid leagueID, int year,
                                                                                         ActionProcessingModeBehavior actionProcessingModeBehavior, RequiredRelationship requiredRelationship, RequiredYearStatus requiredYearStatus)
    {
        if (actionProcessingModeBehavior == ActionProcessingModeBehavior.Ban)
        {
            var systemWideSettings = await _interLeagueService.GetSystemWideSettings();

            if (systemWideSettings.ActionProcessingMode)
            {
                return(GetFailedResult <LeagueYearRecord>(BadRequest("Site is in read-only mode while actions process.")));
            }
        }

        var currentUserRecord = await GetCurrentUser();

        if ((requiredRelationship.MustBeLoggedIn || requiredRelationship.MustBeInOrInvitedToLeague || requiredRelationship.MustBeActiveInYear || requiredRelationship.MustBeLeagueManager) && currentUserRecord.IsFailure)
        {
            return(GetFailedResult <LeagueYearRecord>(Unauthorized()));
        }

        var leagueYear = await _fantasyCriticService.GetLeagueYear(leagueID, year);

        if (leagueYear is null)
        {
            return(GetFailedResult <LeagueYearRecord>(BadRequest("League year does not exist.")));
        }

        var yearStatusValid = requiredYearStatus.StateIsValid(leagueYear);

        if (yearStatusValid.IsFailure)
        {
            return(GetFailedResult <LeagueYearRecord>(BadRequest(yearStatusValid.Error)));
        }

        var playersInLeague = await _leagueMemberService.GetUsersWithRemoveStatus(leagueYear.League);

        var inviteesToLeague = await _leagueMemberService.GetOutstandingInvitees(leagueYear.League);

        var activeUsers = await _leagueMemberService.GetActivePlayersForLeagueYear(leagueYear.League, year);

        bool         isInLeague      = false;
        LeagueInvite?leagueInvite    = null;
        bool         isActiveInYear  = false;
        bool         isLeagueManager = false;
        bool         userIsAdmin     = false;

        if (currentUserRecord.IsSuccess)
        {
            userIsAdmin = await _userManager.IsInRoleAsync(currentUserRecord.Value, "Admin");

            isLeagueManager = leagueYear.League.LeagueManager.Id == currentUserRecord.Value.Id;
            if (requiredRelationship.MustBeLeagueManager && !isLeagueManager)
            {
                return(GetFailedResult <LeagueYearRecord>(Forbid()));
            }

            if (isLeagueManager)
            {
                isInLeague     = true;
                isActiveInYear = true;
            }
            else
            {
                isInLeague = playersInLeague.Any(x => x.User.Id == currentUserRecord.Value.Id);
                if (!isInLeague)
                {
                    leagueInvite = inviteesToLeague.GetMatchingInvite(currentUserRecord.Value.Email);
                }
                isActiveInYear = activeUsers.Any(x => x.Id == currentUserRecord.Value.Id);
            }
        }

        if (!isInLeague && leagueInvite is null && requiredRelationship.MustBeInOrInvitedToLeague)
        {
            return(GetFailedResult <LeagueYearRecord>(Forbid()));
        }

        if (!isActiveInYear && requiredRelationship.MustBeActiveInYear)
        {
            return(GetFailedResult <LeagueYearRecord>(Forbid()));
        }

        LeagueYearUserRelationship relationship = new LeagueYearUserRelationship(leagueInvite, isInLeague, isActiveInYear, isLeagueManager, userIsAdmin);

        return(new GenericResultRecord <LeagueYearRecord>(new LeagueYearRecord(currentUserRecord.ToNullable(), leagueYear, playersInLeague, activeUsers, inviteesToLeague, relationship), null));
    }