From 77b3d612f2da6dbbcf8fca008deef0c307962583 Mon Sep 17 00:00:00 2001 From: runebaas Date: Mon, 6 Apr 2020 15:35:28 +0200 Subject: [PATCH] Re-use the database connection everywhere --- Geekbot.net/Handlers.cs | 15 +++++---------- Geekbot.net/Program.cs | 23 ++++++++++++----------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/Geekbot.net/Handlers.cs b/Geekbot.net/Handlers.cs index 13f523c..48bf966 100644 --- a/Geekbot.net/Handlers.cs +++ b/Geekbot.net/Handlers.cs @@ -9,7 +9,6 @@ using Discord.Rest; using Discord.WebSocket; using Geekbot.net.Database; using Geekbot.net.Database.Models; -using Geekbot.net.Lib.AlmostRedis; using Geekbot.net.Lib.Extensions; using Geekbot.net.Lib.Logger; using Geekbot.net.Lib.ReactionListener; @@ -23,24 +22,20 @@ namespace Geekbot.net private readonly DatabaseContext _database; private readonly IDiscordClient _client; private readonly IGeekbotLogger _logger; - private readonly IAlmostRedis _redis; private readonly IServiceProvider _servicesProvider; private readonly CommandService _commands; private readonly IUserRepository _userRepository; private readonly IReactionListener _reactionListener; - private readonly DatabaseContext _messageCounterDatabaseContext; private readonly RestApplication _applicationInfo; private readonly List _ignoredServers; - public Handlers(DatabaseInitializer databaseInitializer, IDiscordClient client, IGeekbotLogger logger, IAlmostRedis redis, + public Handlers(DatabaseContext database, IDiscordClient client, IGeekbotLogger logger, IServiceProvider servicesProvider, CommandService commands, IUserRepository userRepository, IReactionListener reactionListener, RestApplication applicationInfo) { - _database = databaseInitializer.Initialize(); - _messageCounterDatabaseContext = databaseInitializer.Initialize(); + _database = database; _client = client; _logger = logger; - _redis = redis; _servicesProvider = servicesProvider; _commands = commands; _userRepository = userRepository; @@ -129,7 +124,7 @@ namespace Geekbot.net var channel = (SocketGuildChannel) message.Channel; - var rowId = await _messageCounterDatabaseContext.Database.ExecuteSqlRawAsync( + var rowId = await _database.Database.ExecuteSqlRawAsync( "UPDATE \"Messages\" SET \"MessageCount\" = \"MessageCount\" + 1 WHERE \"GuildId\" = {0} AND \"UserId\" = {1}", channel.Guild.Id.AsLong(), message.Author.Id.AsLong() @@ -137,13 +132,13 @@ namespace Geekbot.net if (rowId == 0) { - _messageCounterDatabaseContext.Messages.Add(new MessagesModel + await _database.Messages.AddAsync(new MessagesModel { UserId = message.Author.Id.AsLong(), GuildId = channel.Guild.Id.AsLong(), MessageCount = 1 }); - _messageCounterDatabaseContext.SaveChanges(); + await _database.SaveChangesAsync(); } if (message.Author.IsBot) return; diff --git a/Geekbot.net/Program.cs b/Geekbot.net/Program.cs index 4907431..9ff6e90 100755 --- a/Geekbot.net/Program.cs +++ b/Geekbot.net/Program.cs @@ -41,6 +41,7 @@ namespace Geekbot.net private IUserRepository _userRepository; private RunParameters _runParameters; private IAlmostRedis _redis; + private DatabaseContext _database; private static void Main(string[] args) { @@ -87,11 +88,11 @@ namespace Geekbot.net _commands = new CommandService(); _databaseInitializer = new DatabaseInitializer(runParameters, logger); - var database = _databaseInitializer.Initialize(); - database.Database.EnsureCreated(); - if(!_runParameters.InMemory) database.Database.Migrate(); + _database = _databaseInitializer.Initialize(); + _database.Database.EnsureCreated(); + if(!_runParameters.InMemory) _database.Database.Migrate(); - _globalSettings = new GlobalSettings(database); + _globalSettings = new GlobalSettings(_database); try { @@ -116,7 +117,7 @@ namespace Geekbot.net _services = new ServiceCollection(); - _userRepository = new UserRepository(_databaseInitializer.Initialize(), logger); + _userRepository = new UserRepository(_database, logger); var fortunes = new FortunesProvider(logger); var mediaProvider = new MediaProvider(logger); var malClient = new MalClient(_globalSettings, logger); @@ -137,9 +138,9 @@ namespace Geekbot.net _services.AddSingleton(mtgManaConverter); _services.AddSingleton(wikipediaClient); _services.AddSingleton(randomNumberGenerator); + _services.AddSingleton(_database); _services.AddSingleton(_globalSettings); - _services.AddTransient(e => new HighscoreManager(_databaseInitializer.Initialize(), _userRepository)); - _services.AddTransient(e => _databaseInitializer.Initialize()); + _services.AddTransient(e => new HighscoreManager(_database, _userRepository)); logger.Information(LogSource.Geekbot, "Connecting to Discord"); @@ -162,7 +163,7 @@ namespace Geekbot.net _logger.Information(LogSource.Geekbot, $"Now Connected as {_client.CurrentUser.Username} to {_client.Guilds.Count} Servers"); _logger.Information(LogSource.Geekbot, "Registering Stuff"); - var translationHandler = new TranslationHandler(_databaseInitializer.Initialize(), _logger); + var translationHandler = new TranslationHandler(_database, _logger); var errorHandler = new ErrorHandler(_logger, translationHandler, _runParameters.ExposeErrors); var reactionListener = new ReactionListener(_redis.Db); _services.AddSingleton(errorHandler); @@ -172,7 +173,7 @@ namespace Geekbot.net _servicesProvider = _services.BuildServiceProvider(); await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _servicesProvider); - var handlers = new Handlers(_databaseInitializer, _client, _logger, _redis, _servicesProvider, _commands, _userRepository, reactionListener, applicationInfo); + var handlers = new Handlers(_database, _client, _logger, _servicesProvider, _commands, _userRepository, reactionListener, applicationInfo); _client.MessageReceived += handlers.RunCommand; _client.MessageDeleted += handlers.MessageDeleted; @@ -207,8 +208,8 @@ namespace Geekbot.net private Task StartWebApi() { _logger.Information(LogSource.Api, "Starting Webserver"); - var highscoreManager = new HighscoreManager(_databaseInitializer.Initialize(), _userRepository); - WebApiStartup.StartWebApi(_logger, _runParameters, _commands, _databaseInitializer.Initialize(), _client, _globalSettings, highscoreManager); + var highscoreManager = new HighscoreManager(_database, _userRepository); + WebApiStartup.StartWebApi(_logger, _runParameters, _commands, _database, _client, _globalSettings, highscoreManager); return Task.CompletedTask; } }