diff --git a/src/Services/Report/src/Data/Repositories/GameRepository.cs b/src/Services/Report/src/Data/Repositories/GameRepository.cs index 4796f37..956f506 100644 --- a/src/Services/Report/src/Data/Repositories/GameRepository.cs +++ b/src/Services/Report/src/Data/Repositories/GameRepository.cs @@ -8,7 +8,7 @@ namespace CodeBreaker.Services.Report.Data.Repositories; -public class GameRepository(ReportDbContext dbContext) : IGameRepository +public class GameRepository(ReportDbContext dbContext) : IGameRepository, IDisposable { public IAsyncEnumerable GetAsync(GetGamesArgs args, CancellationToken cancellationToken = default) => dbContext.Games @@ -92,4 +92,9 @@ private static void SyncPositions(IEnumerable keyPegs) foreach (var keyPeg in keyPegs) keyPeg.Position = i++; } + + public void Dispose() + { + dbContext.Dispose(); + } } diff --git a/src/Services/Report/src/Data/Repositories/IGameRepository.cs b/src/Services/Report/src/Data/Repositories/IGameRepository.cs index dc214d7..2c4bf59 100644 --- a/src/Services/Report/src/Data/Repositories/IGameRepository.cs +++ b/src/Services/Report/src/Data/Repositories/IGameRepository.cs @@ -2,7 +2,7 @@ using CodeBreaker.Services.Report.Data.Repositories.Args; namespace CodeBreaker.Services.Report.Data.Repositories; -public interface IGameRepository +public interface IGameRepository : IDisposable { Task CreateAsync(Game game, CancellationToken cancellationToken = default); Task DeleteAsync(Guid gameId, CancellationToken cancellationToken = default); diff --git a/src/Services/Report/src/Data/Repositories/IStatisticsRepository.cs b/src/Services/Report/src/Data/Repositories/IStatisticsRepository.cs index 4febeaf..8d17e95 100644 --- a/src/Services/Report/src/Data/Repositories/IStatisticsRepository.cs +++ b/src/Services/Report/src/Data/Repositories/IStatisticsRepository.cs @@ -1,7 +1,7 @@ using CodeBreaker.Services.Report.Data.Models; namespace CodeBreaker.Services.Report.Data.Repositories; -public interface IStatisticsRepository +public interface IStatisticsRepository : IDisposable { Task GetStatisticsAsync(GetStatisticsArgs args, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/src/Services/Report/src/Data/Repositories/StatisticsRepository.cs b/src/Services/Report/src/Data/Repositories/StatisticsRepository.cs index 8b81d9f..487150c 100644 --- a/src/Services/Report/src/Data/Repositories/StatisticsRepository.cs +++ b/src/Services/Report/src/Data/Repositories/StatisticsRepository.cs @@ -4,7 +4,7 @@ namespace CodeBreaker.Services.Report.Data.Repositories; -public class StatisticsRepository(ReportDbContext dbContext) : IStatisticsRepository +public class StatisticsRepository(ReportDbContext dbContext) : IStatisticsRepository, IDisposable { private class StatisticsResult { @@ -37,6 +37,11 @@ public async Task GetStatisticsAsync(GetStatisticsArgs args, Cancell }) .SingleAsync(cancellationToken); } + + public void Dispose() + { + dbContext.Dispose(); + } } diff --git a/src/Services/Report/src/MessageWorker/Services/MessageService.cs b/src/Services/Report/src/MessageWorker/Services/MessageService.cs index 0088971..26cfab5 100644 --- a/src/Services/Report/src/MessageWorker/Services/MessageService.cs +++ b/src/Services/Report/src/MessageWorker/Services/MessageService.cs @@ -46,21 +46,21 @@ public async Task RunAsync(CancellationToken cancellationToken = default) private async Task OnGameCreatedCallbackAsync(GameCreatedPayload payload, CancellationToken cancellationToken) { _logger.LogInformation("OnGameCreated"); - var repository = _services.GetRequiredService(); + using var repository = _services.GetRequiredService(); await repository.CreateAsync(payload.ToModel(), cancellationToken); } private async Task OnMoveCreatedCallbackAsync(MoveCreatedPayload payload, CancellationToken cancellationToken) { _logger.LogInformation("OnMoveCreated"); - var repository = _services.GetRequiredService(); + using var repository = _services.GetRequiredService(); await repository.AddMoveAsync(payload.GameId, payload.ToMoveModel(), cancellationToken); } private async Task OnGameEndedCallbackAsync(GameEndedPayload payload, CancellationToken cancellationToken) { _logger.LogInformation("OnGameEnded"); - var repository = _services.GetRequiredService(); + using var repository = _services.GetRequiredService(); var game = await repository.GetAsync(payload.Id, cancellationToken); payload.ToModel(game); await repository.UpdateAsync(payload.Id, game, cancellationToken);