Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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,
            });
        }
Exemplo n.º 3
0
        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));
        }