Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@ public CatalogoController(IProdutoRepository produtoRepository)
_produtoRepository = produtoRepository;
}

[AllowAnonymous]
[HttpGet("catalogo/produtos")]
public async Task<IEnumerable<Produto>> Index()
public async Task<PagedResult<Produto>> Index([FromQuery] int ps = 8, [FromQuery] int page = 1, [FromQuery] string q = null)
{
return await _produtoRepository.ObterTodos();
return await _produtoRepository.ObterTodos(ps, page, q);
}

[HttpGet("catalogo/produtos/{id}")]
Expand Down
35 changes: 28 additions & 7 deletions src/services/JSE.Catalogo.API/Data/Repository/ProdutoRepository.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using JSE.Catalogo.API.Models;
using Dapper;
using JSE.Catalogo.API.Models;
using JSE.Core.Data;
using Microsoft.EntityFrameworkCore;

Expand All @@ -7,19 +8,39 @@ namespace JSE.Catalogo.API.Data.Repository
public class ProdutoRepository : IProdutoRepository
{
private readonly CatalogoContext _context;

public ProdutoRepository(CatalogoContext context)
{
_context = context;
}

public IUnitOfWork UnitOfWork => _context;

public async Task<IEnumerable<Produto>> ObterTodos()
public async Task<PagedResult<Produto>> ObterTodos(int pageSize, int pageIndex, string query = null)
{
return await _context.Produtos.AsNoTracking().ToListAsync();
}
var sql = @$"SELECT * FROM Produtos
WHERE (@Nome IS NULL OR Nome LIKE '%' + @Nome + '%')
ORDER BY [Nome]
OFFSET {pageSize * (pageIndex - 1)} ROWS
FETCH NEXT {pageSize} ROWS ONLY
SELECT COUNT(Id) FROM Produtos
WHERE (@Nome IS NULL OR Nome LIKE '%' + @Nome + '%')";

var multi = await _context.Database.GetDbConnection()
.QueryMultipleAsync(sql, new { Nome = query });

var produtos = multi.Read<Produto>();
var total = multi.Read<int>().FirstOrDefault();

return new PagedResult<Produto>()
{
List = produtos,
TotalResults = total,
PageIndex = pageIndex,
PageSize = pageSize,
Query = query
};
}

public async Task<List<Produto>> ObterProdutosPorId(string ids)
{
Expand All @@ -34,14 +55,14 @@ public async Task<List<Produto>> ObterProdutosPorId(string ids)
.Where(p => idsValue.Contains(p.Id) && p.Ativo).ToListAsync();
}

public async Task<Produto> ObterPorId(Guid id)
public async Task<Produto> ObterPorId(Guid id)
{
return await _context.Produtos.FindAsync(id);
}

public void Adicionar(Produto produto)
{
_context.Produtos.Add(produto);
_context.Produtos.Add(produto);
}

public void Atualizar(Produto produto)
Expand Down
1 change: 1 addition & 0 deletions src/services/JSE.Catalogo.API/JSE.Catalogo.API.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="8.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8">
Expand Down
2 changes: 1 addition & 1 deletion src/services/JSE.Catalogo.API/Models/IProdutoRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace JSE.Catalogo.API.Models
{
public interface IProdutoRepository : IRepository<Produto>
{
Task<IEnumerable<Produto>> ObterTodos();
Task<PagedResult<Produto>> ObterTodos(int pageSize, int pageIndex, string query = null);
Task<Produto> ObterPorId(Guid id);
Task<List<Produto>> ObterProdutosPorId(string ids);
void Adicionar(Produto produto);
Expand Down
11 changes: 11 additions & 0 deletions src/services/JSE.Catalogo.API/Models/PagedResult.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace JSE.Catalogo.API.Models
{
public class PagedResult<T> where T : class
{
public IEnumerable<T> List { get; set; }
public int TotalResults { get; set; }
public int PageIndex { get; set; }
public int PageSize { get; set; }
public string Query { get; set; }
}
}
Loading