diff --git a/src/Printbase.Application/IUnitOfWork.cs b/src/Printbase.Application/IUnitOfWork.cs new file mode 100644 index 0000000..5d6a236 --- /dev/null +++ b/src/Printbase.Application/IUnitOfWork.cs @@ -0,0 +1,15 @@ +using Printbase.Domain.Repositories; + +namespace Printbase.Application; + +public interface IUnitOfWork +{ + public IProductRepository ProductRepository { get; } + public ICategoryRepository CategoryRepository { get; } + public IProductVariantRepository ProductVariantRepository { get; } + + Task SaveAsync(); + Task BeginTransactionAsync(); + Task CommitTransactionAsync(); + Task RollbackTransactionAsync(); +} \ No newline at end of file diff --git a/src/Printbase.Infrastructure/UnitOfWork.cs b/src/Printbase.Infrastructure/UnitOfWork.cs new file mode 100644 index 0000000..198cd31 --- /dev/null +++ b/src/Printbase.Infrastructure/UnitOfWork.cs @@ -0,0 +1,36 @@ +using Printbase.Application; +using Printbase.Domain.Repositories; +using Printbase.Infrastructure.Database; + +namespace Printbase.Infrastructure; + +public class UnitOfWork( + ApplicationDbContext context, + IProductRepository productRepository, + IProductVariantRepository productVariantRepository, + ICategoryRepository categoryRepository) : IUnitOfWork +{ + public IProductRepository ProductRepository => productRepository; + public IProductVariantRepository ProductVariantRepository => productVariantRepository; + public ICategoryRepository CategoryRepository => categoryRepository; + + public async Task SaveAsync() + { + await context.SaveChangesAsync(); + } + + public async Task BeginTransactionAsync() + { + await context.Database.BeginTransactionAsync(); + } + + public async Task CommitTransactionAsync() + { + await context.Database.CommitTransactionAsync(); + } + + public async Task RollbackTransactionAsync() + { + await context.Database.RollbackTransactionAsync(); + } +} \ No newline at end of file