Newer
Older
Warehouse / src / Infrastructure / ApplicationDependencies / DataAccess / Repositories / ProductRepositoryEF.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 1 KB Init
using System.Data;
using MyWarehouse.Domain.Products;
using Microsoft.EntityFrameworkCore;
using MyWarehouse.Infrastructure.Persistence.Context;
using MyWarehouse.Application.Common.Dependencies.DataAccess.Repositories;
using MyWarehouse.Infrastructure.ApplicationDependencies.DataAccess.Repositories.Common;

namespace MyWarehouse.Infrastructure.ApplicationDependencies.DataAccess.Repositories;

internal class ProductRepositoryEF : RepositoryBaseEF<Product>, IProductRepository
{
    protected override IQueryable<Product> BaseQuery
        => _context.Products.Include(x => x.Mass);

    public ProductRepositoryEF(ApplicationDbContext context, IMapper mapper) : base(context, mapper)
    { }

    public Task<List<Product>> GetHeaviestProducts(int numberOfProducts)
        => BaseQuery
            .OrderByDescending(p => p.Mass)
            .Take(numberOfProducts)
            .ToListAsync();

    public Task<List<Product>> GetMostStockedProducts(int numberOfProducts)
        => BaseQuery
            .OrderByDescending(p => p.NumberInStock)
            .Take(numberOfProducts)
            .ToListAsync();

    public override void Remove(Product entityToDelete)
    {
        _context.Remove(entityToDelete);
    }

    public override void RemoveRange(IEnumerable<Product> entitiesToDelete)
    {
        foreach (var e in entitiesToDelete)
            Remove(e);
    }
}