35 lines
1.9 KiB
C#
35 lines
1.9 KiB
C#
using Distribution.Models;
|
|
|
|
namespace Distribution.Features.Stock;
|
|
|
|
public interface IStockRepository
|
|
{
|
|
// Balance
|
|
Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId);
|
|
Task<StockBalance?> GetBalanceAsync(Guid itemId, Guid locationId, Guid? itemBatchId, Guid? itemSerialNumberId);
|
|
Task<List<StockBalance>> GetBalancesByLocationAsync(Guid locationId, LocationType locationType);
|
|
Task<List<StockBalance>> GetBalancesAsync(Guid? locationId, LocationType? locationType, Guid? itemId, int page, int pageSize);
|
|
Task<int> GetBalancesCountAsync(Guid? locationId, LocationType? locationType, Guid? itemId);
|
|
Task<List<StockBalance>> GetBalancesByItemAsync(Guid itemId);
|
|
Task<List<StockBalance>> GetLowStockAsync(Guid? locationId);
|
|
Task AddBalanceAsync(StockBalance balance);
|
|
void UpdateBalance(StockBalance balance);
|
|
|
|
// Movements
|
|
Task AddMovementAsync(StockMovement movement);
|
|
Task<StockMovement?> GetMovementByIdAsync(Guid id);
|
|
void UpdateMovement(StockMovement movement);
|
|
Task<List<StockMovement>> GetMovementsAsync(Guid? locationId, Guid? itemId, MovementType? type, DateTime? from, DateTime? to, int page, int pageSize);
|
|
Task<int> GetMovementsCountAsync(Guid? locationId, Guid? itemId, MovementType? type, DateTime? from, DateTime? to);
|
|
|
|
// Batches — a null batchNumber always creates a fresh expiry-only lot (no dedup possible on null).
|
|
Task<ItemBatch?> FindBatchAsync(Guid itemId, string batchNumber);
|
|
Task AddItemBatchAsync(ItemBatch batch);
|
|
|
|
// Serial numbers
|
|
Task<bool> SerialNumberExistsAsync(Guid itemId, string serialNumber);
|
|
/// <summary>One past the highest numeric suffix among the item's existing serials that start with <paramref name="prefix"/> (1 if none).</summary>
|
|
Task<int> GetNextSerialSequenceAsync(Guid itemId, string prefix);
|
|
Task AddItemSerialNumberAsync(ItemSerialNumber serial);
|
|
}
|