using MediatR;
using CMSMicroservice.Domain.Entities;
namespace CMSMicroservice.Application.Features.InventoryItems.Queries;
///
/// Query برای دریافت آیتم موجودی به ID
///
public record GetInventoryItemByIdQuery(long Id) : IRequest;
///
/// Query برای دریافت آیتم موجودی به Product ID
///
public record GetInventoryItemByProductIdQuery(long ProductId, long? WarehouseId = null) : IRequest;
///
/// Query برای دریافت آیتم موجودی به DiscountProduct ID
///
public record GetInventoryItemByDiscountProductIdQuery(long DiscountProductId, long? WarehouseId = null) : IRequest;
///
/// Query برای جستجوی آیتم های موجودی
///
public record SearchInventoryItemsQuery : IRequest>
{
public long? WarehouseId { get; init; }
public long? ProductId { get; init; }
public long? DiscountProductId { get; init; }
public string? ProductName { get; init; }
public bool? IsActive { get; init; }
public bool? IsLowStock { get; init; }
public bool? IsOutOfStock { get; init; }
public int Skip { get; init; } = 0;
public int Take { get; init; } = 100;
}
///
/// Query برای دریافت تعداد آیتم های موجودی
///
public record GetInventoryItemsCountQuery : IRequest
{
public long? WarehouseId { get; init; }
public long? ProductId { get; init; }
public long? DiscountProductId { get; init; }
public string? ProductName { get; init; }
public bool? IsActive { get; init; }
public bool? IsLowStock { get; init; }
public bool? IsOutOfStock { get; init; }
}
///
/// Query برای دریافت آیتم های کم موجود
///
public record GetLowStockItemsQuery : IRequest>
{
public long? WarehouseId { get; init; }
public int Count { get; init; } = 50;
}
///
/// Query برای دریافت آیتم های ناموجود
///
public record GetOutOfStockItemsQuery : IRequest>
{
public long? WarehouseId { get; init; }
public int Count { get; init; } = 50;
}
///
/// Query برای چک کردن دسترسی موجودی
///
public record CheckInventoryAvailabilityQuery : IRequest
{
public long InventoryItemId { get; init; }
public int RequiredQuantity { get; init; }
}
///
/// Query برای دریافت موجودی قابل دسترس
///
public record GetAvailableQuantityQuery(long InventoryItemId) : IRequest;
///
/// Query برای دریافت آیتم های موجودی در انبار
///
public record GetWarehouseInventoryItemsQuery : IRequest>
{
public long WarehouseId { get; init; }
public bool? IsActive { get; init; }
public bool? IsLowStock { get; init; }
public int Skip { get; init; } = 0;
public int Take { get; init; } = 100;
}