using Microsoft.EntityFrameworkCore.Storage;
using StoreService.Database.Entities;
namespace StoreService.Repositories;
///
/// Unit of work pattern abstraction encapsulating repositories and transactions.
///
public interface IUnitOfWork : IAsyncDisposable, IDisposable
{
#region Repositories
IGenericRepository StoreCategories { get; }
IGenericRepository StoreItems { get; }
IGenericRepository StoreDiscounts { get; }
IGenericRepository StoreDiscountItems { get; }
IGenericRepository StoreOrders { get; }
IGenericRepository StoreOrderItems { get; }
IGenericRepository StoreOrderItemDiscounts { get; }
#endregion
#region Save
bool SaveChanges();
Task SaveChangesAsync(CancellationToken ct = default);
#endregion
#region Transactions
Task BeginTransactionAsync(CancellationToken ct = default);
Task CommitTransactionAsync(CancellationToken ct = default);
Task RollbackTransactionAsync(CancellationToken ct = default);
#endregion
}