public async Task <ActionResult> Subscribe([FromBody] LeagueSubscriptionDto dto)
        {
            var userId = User.Claims.GetUserId();

            if (userId == null)
            {
                return(Forbid());
            }

            var league = await Context.Leagues
                         .FirstOrDefaultAsync(o => o.Id == dto.LeagueId);

            if (league == null)
            {
                return(BadRequest(new InvalidLeagueException()));
            }

            var fighter = await Context.Fighters
                          .Where(o => o.UserId == userId)
                          .FirstOrDefaultAsync(o => o.Id == dto.FighterId);

            if (fighter == null)
            {
                return(BadRequest(new InvalidFighterException()));
            }

            if (fighter.PowerLevel() > league.Options.MatchOptions.MaxPowerlevel)
            {
                return(BadRequest(new IllegalFighterPowerlevelException()));
            }

            var subscriptions = await Context.LeagueSubscriptions
                                .Include(o => o.Fighter)
                                .Where(o => o.LeagueId == league.Id && o.Fighter.UserId == userId)
                                .ToListAsync();

            if ((subscriptions.Count + 1) > league.Options.MatchOptions.MaxFightersPerUser)
            {
                return(BadRequest(new LeagueSubscriptionLimitExceededException()));
            }

            Context.Add(Mapper.Map <LeagueSubscription>(dto));
            await Context.SaveChangesAsync();

            return(Ok());
        }
        public async Task <ActionResult> Unsubscribe([FromBody] LeagueSubscriptionDto dto)
        {
            var userId = User.Claims.GetUserId();

            if (userId == null)
            {
                return(Forbid());
            }

            var league = await Context.Leagues
                         .FirstOrDefaultAsync(o => o.Id == dto.LeagueId);

            if (league == null)
            {
                return(BadRequest(new InvalidLeagueException()));
            }

            var fighter = await Context.Fighters
                          .Where(o => o.UserId == userId)
                          .FirstOrDefaultAsync(o => o.Id == dto.FighterId);

            if (fighter == null)
            {
                return(BadRequest(new InvalidFighterException()));
            }

            var subscription = await Context.LeagueSubscriptions
                               .FirstOrDefaultAsync(o => o.FighterId == fighter.Id && o.LeagueId == league.Id);

            if (subscription == null)
            {
                return(BadRequest(new InvalidLeagueSubscriptionException()));
            }

            Context.Remove(subscription);
            await Context.SaveChangesAsync();

            return(Ok());
        }