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()); }