using MyWarehouse.Application.Common.Dependencies.DataAccess;
using MyWarehouse.Application.Common.Exceptions;
using MyWarehouse.Domain.Products;
namespace MyWarehouse.Application.Products.DeleteProduct;
public record DeleteProductCommand : IRequest
{
public int Id { get; init; }
}
public class DeleteProductCommandHandler : IRequestHandler<DeleteProductCommand>
{
private readonly IUnitOfWork _unitOfWork;
public DeleteProductCommandHandler(IUnitOfWork unitOfWork)
=> _unitOfWork = unitOfWork;
public async Task<Unit> Handle(DeleteProductCommand request, CancellationToken cancellationToken)
{
var product = await _unitOfWork.Products.GetByIdAsync(request.Id)
?? throw new EntityNotFoundException(nameof(Product), request.Id);
_unitOfWork.Products.Remove(product);
await _unitOfWork.SaveChanges();
return Unit.Value;
}
}