public async Task <IHttpActionResult> GetEnemiesByAttribute( EnemiesPagination pagination, [ModelBinder(typeof(EnemyAttributeBinder))] string attribute, CancellationToken cancellationToken = default) { var baseQuery = from e in db.Enemies.AsNoTracking() select e; switch (attribute) { case "boss": baseQuery = baseQuery.Where(e => e.OptionalStats.Boss); break; case "bounce-on-movement-fail": baseQuery = baseQuery.Where(e => e.OptionalStats.BounceOnMovementFail); break; case "floating": baseQuery = baseQuery.Where(e => e.OptionalStats.Floating); break; case "ignore-liquids": baseQuery = baseQuery.Where(e => e.OptionalStats.IgnoreLiquids); break; case "ignore-walls": baseQuery = baseQuery.Where(e => e.OptionalStats.IgnoreWalls); break; case "is-monkey-like": baseQuery = baseQuery.Where(e => e.OptionalStats.IsMonkeyLike); break; case "massive": baseQuery = baseQuery.Where(e => e.OptionalStats.Massive); break; case "miniboss": baseQuery = baseQuery.Where(e => e.OptionalStats.Miniboss); break; } var content = await GetEnemiesAsync(pagination, baseQuery, cancellationToken); return(Ok(content)); }
private async Task <EnemiesEnvelope> GetEnemiesAsync( EnemiesPagination pagination, IQueryable <Enemy> baseQuery, CancellationToken cancellationToken) { var query = from e in baseQuery orderby e.Name, e.Type select e; var total = await query.CountAsync(cancellationToken); var enemies = await(from e in query select new EnemyDTO { Name = e.Name, Type = e.Type, DisplayName = e.DisplayName, Health = e.Stats.Health, Damage = e.Stats.DamagePerHit, BeatsPerMove = e.Stats.BeatsPerMove, Drops = e.Stats.CoinsToDrop, }) .Page(pagination) .ToListAsync(cancellationToken); return(new EnemiesEnvelope { Total = total, Enemies = enemies, }); }
public async Task <IHttpActionResult> GetEnemies( EnemiesPagination pagination, CancellationToken cancellationToken = default) { var baseQuery = from e in db.Enemies.AsNoTracking() select e; var content = await GetEnemiesAsync(pagination, baseQuery, cancellationToken); return(Ok(content)); }