using System.Diagnostics;
using LctMonolith.Database.Repositories;
using LctMonolith.Models;
using EventLog = LctMonolith.Models.EventLog;
namespace LctMonolith.Database.UnitOfWork;
///
/// Unit of Work aggregates repositories and transaction boundary.
///
public interface IUnitOfWork
{
IGenericRepository Users { get; }
IGenericRepository Ranks { get; }
IGenericRepository RankRequiredMissions { get; }
IGenericRepository RankRequiredCompetencies { get; }
IGenericRepository Missions { get; }
IGenericRepository UserMissions { get; }
IGenericRepository MissionCompetencyRewards { get; }
IGenericRepository MissionArtifactRewards { get; }
IGenericRepository Competencies { get; }
IGenericRepository UserCompetencies { get; }
IGenericRepository Artifacts { get; }
IGenericRepository UserArtifacts { get; }
IGenericRepository StoreItems { get; }
IGenericRepository UserInventoryItems { get; }
IGenericRepository Transactions { get; }
IGenericRepository EventLogs { get; }
IGenericRepository RefreshTokens { get; }
IGenericRepository Notifications { get; }
Task SaveChangesAsync(CancellationToken ct = default);
Task BeginTransactionAsync(CancellationToken ct = default);
Task CommitAsync(CancellationToken ct = default);
Task RollbackAsync(CancellationToken ct = default);
}