using LctMonolith.Database.Repositories;
using LctMonolith.Models.Database;
using EventLog = LctMonolith.Models.Database.EventLog;
namespace LctMonolith.Database.UnitOfWork;
///
/// Unit of Work aggregates repositories and transaction boundary.
///
public interface IUnitOfWork
{
IGenericRepository Users { get; }
IGenericRepository Players { get; }
IGenericRepository MissionCategories { get; } // added
IGenericRepository Ranks { get; }
IGenericRepository RankMissionRules { get; }
IGenericRepository RankSkillRules { get; }
IGenericRepository Missions { get; }
IGenericRepository PlayerMissions { get; }
IGenericRepository MissionSkillRewards { get; }
IGenericRepository Skills { get; }
IGenericRepository PlayerSkills { get; }
IGenericRepository StoreItems { get; }
IGenericRepository UserInventoryItems { get; }
IGenericRepository Transactions { get; }
IGenericRepository EventLogs { get; }
IGenericRepository RefreshTokens { get; }
IGenericRepository Notifications { get; }
IGenericRepository MissionItemRewards { get; } // added
IGenericRepository MissionRankRules { get; } // added
IGenericRepository Dialogues { get; }
IGenericRepository DialogueMessages { get; }
IGenericRepository DialogueMessageResponseOptions { get; }
IGenericRepository Profiles { get; }
Task SaveChangesAsync(CancellationToken ct = default);
Task BeginTransactionAsync(CancellationToken ct = default);
Task CommitAsync(CancellationToken ct = default);
Task RollbackAsync(CancellationToken ct = default);
}