コード例 #1
0
        public virtual async Task <IActionResult> GetByIdAsync(TKey id, QueryString queryString)
        {
            var query = Repository.Query.AsNoTracking().Where(p => p.Id.Equals(id));

            query = ApplyRouteParams(query);
            query = QueryBuilder.Build(query, queryString);

            var entity = await query.FirstOrDefaultAsync();

            if (entity == null)
            {
                return(await BuildResponseForNotFoundEntityAsync(id, queryString));
            }

            var data = Shaper.Shape(ApiMapper.Map <TOutDto>(entity), queryString);

            LogData(data);

            return(Ok(ResponseBuilder
                      .AddData(data)
                      .Build()));
        }
コード例 #2
0
        public virtual async Task <IActionResult> GetBatchAsync(KeyList <TKey> ids, QueryString queryString)
        {
            var query = Repository.Query.AsNoTracking().Where(p => ids.Contains(p.Id));

            query = ApplyRouteParams(query);
            query = QueryBuilder.Build(query, queryString);

            var entityList = await query.ToListAsync();

            if (ids.Count != entityList.Count)
            {
                var missingIds = ids.Except(entityList.Select(p => p.Id));
                return(await BuildResponseForNotFoundEntityAsync(missingIds, queryString));
            }

            var data = ApiMapper.Map <IEnumerable <TOutDto> >(entityList).Select(p => Shaper.Shape(p, queryString));

            LogData(data);

            return(Ok(ResponseBuilder
                      .AddData(data)
                      .Build()));
        }
コード例 #3
0
        public virtual async Task <IActionResult> GetAsync(QueryString queryString)
        {
            var query = Repository.Query.AsNoTracking();

            query = ApplyRouteParams(query);
            query = QueryBuilder.Build(query, queryString);

            var entityList = await PagedList <TEntity> .CreateAsync(query, queryString);

            if (!entityList.Any())
            {
                await ValidateRouteAsync(queryString);

                if (ResponseBuilder.HasErrors())
                {
                    return(NotFound(ResponseBuilder.Build()));
                }
            }

            Response.Headers.Add("X-Paging", PagingHeaderBuilder.Build(this, queryString, entityList));

            var data = ApiMapper.Map <IEnumerable <TOutDto> >(entityList).Select(p => Shaper.Shape(p, queryString));

            LogData(data);

            return(Ok(ResponseBuilder
                      .AddData(data)
                      .Build()));
        }