feat: repositories

This commit is contained in:
2025-09-29 16:58:19 +03:00
parent 0342562187
commit eab5db823b

View File

@@ -1,3 +1,5 @@
using GamificationService.Database.GenericRepository;
using GamificationService.Models.Database;
using Microsoft.EntityFrameworkCore.Storage;
namespace GamificationService.Database.UnitOfWork;
@@ -8,6 +10,22 @@ public class UnitOfWork : IUnitOfWork
private readonly ApplicationContext _context;
private IDbContextTransaction? _transaction;
// Repository fields
private IGenericRepository<Rank>? _rankRepository;
private IGenericRepository<Skill>? _skillRepository;
private IGenericRepository<Player>? _playerRepository;
private IGenericRepository<MissionCategory>? _missionCategoryRepository;
private IGenericRepository<Mission>? _missionRepository;
private IGenericRepository<MissionRankRule>? _missionRankRuleRepository;
private IGenericRepository<MissionSkillReward>? _missionSkillRewardRepository;
private IGenericRepository<MissionItemReward>? _missionItemRewardRepository;
private IGenericRepository<RankMissionRule>? _rankMissionRuleRepository;
private IGenericRepository<RankSkillRule>? _rankSkillRuleRepository;
private IGenericRepository<PlayerSkill>? _playerSkillRepository;
private IGenericRepository<PlayerMission>? _playerMissionRepository;
private IGenericRepository<Dialogue>? _dialogueRepository;
private IGenericRepository<DialogueMessage>? _dialogueMessageRepository;
private IGenericRepository<DialogueMessageResponseOption>? _dialogueMessageResponseOptionRepository;
#endregion
public UnitOfWork(ApplicationContext context)
@@ -16,6 +34,50 @@ public class UnitOfWork : IUnitOfWork
}
#region Repositories
public IGenericRepository<Rank> Ranks =>
_rankRepository ??= new GenericRepository<Rank>(_context);
public IGenericRepository<Skill> Skills =>
_skillRepository ??= new GenericRepository<Skill>(_context);
public IGenericRepository<Player> Players =>
_playerRepository ??= new GenericRepository<Player>(_context);
public IGenericRepository<MissionCategory> MissionCategories =>
_missionCategoryRepository ??= new GenericRepository<MissionCategory>(_context);
public IGenericRepository<Mission> Missions =>
_missionRepository ??= new GenericRepository<Mission>(_context);
public IGenericRepository<MissionRankRule> MissionRankRules =>
_missionRankRuleRepository ??= new GenericRepository<MissionRankRule>(_context);
public IGenericRepository<MissionSkillReward> MissionSkillRewards =>
_missionSkillRewardRepository ??= new GenericRepository<MissionSkillReward>(_context);
public IGenericRepository<MissionItemReward> MissionItemRewards =>
_missionItemRewardRepository ??= new GenericRepository<MissionItemReward>(_context);
public IGenericRepository<RankMissionRule> RankMissionRules =>
_rankMissionRuleRepository ??= new GenericRepository<RankMissionRule>(_context);
public IGenericRepository<RankSkillRule> RankSkillRules =>
_rankSkillRuleRepository ??= new GenericRepository<RankSkillRule>(_context);
public IGenericRepository<PlayerSkill> PlayerSkills =>
_playerSkillRepository ??= new GenericRepository<PlayerSkill>(_context);
public IGenericRepository<PlayerMission> PlayerMissions =>
_playerMissionRepository ??= new GenericRepository<PlayerMission>(_context);
public IGenericRepository<Dialogue> Dialogues =>
_dialogueRepository ??= new GenericRepository<Dialogue>(_context);
public IGenericRepository<DialogueMessage> DialogueMessages =>
_dialogueMessageRepository ??= new GenericRepository<DialogueMessage>(_context);
public IGenericRepository<DialogueMessageResponseOption> DialogueMessageResponseOptions =>
_dialogueMessageResponseOptionRepository ??= new GenericRepository<DialogueMessageResponseOption>(_context);
#endregion
#region Save Methods
@@ -36,7 +98,7 @@ public class UnitOfWork : IUnitOfWork
public async Task CommitTransactionAsync()
{
if (_transaction is null)
throw new InvalidOperationException("A transaction has not been started.");
throw new InvalidOperationException("No transactions have been started yet.");
try
{
@@ -64,5 +126,4 @@ public class UnitOfWork : IUnitOfWork
_transaction = null;
}
#endregion
}