Kavita/API/Data/UnitOfWork.cs
Joseph Milazzo 6e1b227e65
Transaction Support (#309)
* Added transactions to UnitOfWork and refactored code to use it.

* This included blank UI fix from Kavita-webui
2021-06-18 07:37:48 -05:00

58 lines
1.8 KiB
C#

using System.Threading.Tasks;
using API.Entities;
using API.Interfaces;
using AutoMapper;
using Microsoft.AspNetCore.Identity;
namespace API.Data
{
public class UnitOfWork : IUnitOfWork
{
private readonly DataContext _context;
private readonly IMapper _mapper;
private readonly UserManager<AppUser> _userManager;
public UnitOfWork(DataContext context, IMapper mapper, UserManager<AppUser> userManager)
{
_context = context;
_mapper = mapper;
_userManager = userManager;
}
public ISeriesRepository SeriesRepository => new SeriesRepository(_context, _mapper);
public IUserRepository UserRepository => new UserRepository(_context, _userManager);
public ILibraryRepository LibraryRepository => new LibraryRepository(_context, _mapper);
public IVolumeRepository VolumeRepository => new VolumeRepository(_context, _mapper);
public ISettingsRepository SettingsRepository => new SettingsRepository(_context, _mapper);
public IAppUserProgressRepository AppUserProgressRepository => new AppUserProgressRepository(_context);
public ICollectionTagRepository CollectionTagRepository => new CollectionTagRepository(_context, _mapper);
public bool Commit()
{
return _context.SaveChanges() > 0;
}
public async Task<bool> CommitAsync()
{
return await _context.SaveChangesAsync() > 0;
}
public bool HasChanges()
{
return _context.ChangeTracker.HasChanges();
}
public async Task<bool> RollbackAsync()
{
await _context.DisposeAsync();
return true;
}
public bool Rollback()
{
_context.Dispose();
return true;
}
}
}