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