Re-use the database connection everywhere

This commit is contained in:
runebaas 2020-04-06 15:35:28 +02:00
parent f12bdcf4cd
commit 77b3d612f2
No known key found for this signature in database
GPG key ID: 2677AF508D0300D6
2 changed files with 17 additions and 21 deletions

View file

@ -9,7 +9,6 @@ using Discord.Rest;
using Discord.WebSocket; using Discord.WebSocket;
using Geekbot.net.Database; using Geekbot.net.Database;
using Geekbot.net.Database.Models; using Geekbot.net.Database.Models;
using Geekbot.net.Lib.AlmostRedis;
using Geekbot.net.Lib.Extensions; using Geekbot.net.Lib.Extensions;
using Geekbot.net.Lib.Logger; using Geekbot.net.Lib.Logger;
using Geekbot.net.Lib.ReactionListener; using Geekbot.net.Lib.ReactionListener;
@ -23,24 +22,20 @@ namespace Geekbot.net
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly IDiscordClient _client; private readonly IDiscordClient _client;
private readonly IGeekbotLogger _logger; private readonly IGeekbotLogger _logger;
private readonly IAlmostRedis _redis;
private readonly IServiceProvider _servicesProvider; private readonly IServiceProvider _servicesProvider;
private readonly CommandService _commands; private readonly CommandService _commands;
private readonly IUserRepository _userRepository; private readonly IUserRepository _userRepository;
private readonly IReactionListener _reactionListener; private readonly IReactionListener _reactionListener;
private readonly DatabaseContext _messageCounterDatabaseContext;
private readonly RestApplication _applicationInfo; private readonly RestApplication _applicationInfo;
private readonly List<ulong> _ignoredServers; private readonly List<ulong> _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, IServiceProvider servicesProvider, CommandService commands, IUserRepository userRepository,
IReactionListener reactionListener, RestApplication applicationInfo) IReactionListener reactionListener, RestApplication applicationInfo)
{ {
_database = databaseInitializer.Initialize(); _database = database;
_messageCounterDatabaseContext = databaseInitializer.Initialize();
_client = client; _client = client;
_logger = logger; _logger = logger;
_redis = redis;
_servicesProvider = servicesProvider; _servicesProvider = servicesProvider;
_commands = commands; _commands = commands;
_userRepository = userRepository; _userRepository = userRepository;
@ -129,7 +124,7 @@ namespace Geekbot.net
var channel = (SocketGuildChannel) message.Channel; 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}", "UPDATE \"Messages\" SET \"MessageCount\" = \"MessageCount\" + 1 WHERE \"GuildId\" = {0} AND \"UserId\" = {1}",
channel.Guild.Id.AsLong(), channel.Guild.Id.AsLong(),
message.Author.Id.AsLong() message.Author.Id.AsLong()
@ -137,13 +132,13 @@ namespace Geekbot.net
if (rowId == 0) if (rowId == 0)
{ {
_messageCounterDatabaseContext.Messages.Add(new MessagesModel await _database.Messages.AddAsync(new MessagesModel
{ {
UserId = message.Author.Id.AsLong(), UserId = message.Author.Id.AsLong(),
GuildId = channel.Guild.Id.AsLong(), GuildId = channel.Guild.Id.AsLong(),
MessageCount = 1 MessageCount = 1
}); });
_messageCounterDatabaseContext.SaveChanges(); await _database.SaveChangesAsync();
} }
if (message.Author.IsBot) return; if (message.Author.IsBot) return;

View file

@ -41,6 +41,7 @@ namespace Geekbot.net
private IUserRepository _userRepository; private IUserRepository _userRepository;
private RunParameters _runParameters; private RunParameters _runParameters;
private IAlmostRedis _redis; private IAlmostRedis _redis;
private DatabaseContext _database;
private static void Main(string[] args) private static void Main(string[] args)
{ {
@ -87,11 +88,11 @@ namespace Geekbot.net
_commands = new CommandService(); _commands = new CommandService();
_databaseInitializer = new DatabaseInitializer(runParameters, logger); _databaseInitializer = new DatabaseInitializer(runParameters, logger);
var database = _databaseInitializer.Initialize(); _database = _databaseInitializer.Initialize();
database.Database.EnsureCreated(); _database.Database.EnsureCreated();
if(!_runParameters.InMemory) database.Database.Migrate(); if(!_runParameters.InMemory) _database.Database.Migrate();
_globalSettings = new GlobalSettings(database); _globalSettings = new GlobalSettings(_database);
try try
{ {
@ -116,7 +117,7 @@ namespace Geekbot.net
_services = new ServiceCollection(); _services = new ServiceCollection();
_userRepository = new UserRepository(_databaseInitializer.Initialize(), logger); _userRepository = new UserRepository(_database, logger);
var fortunes = new FortunesProvider(logger); var fortunes = new FortunesProvider(logger);
var mediaProvider = new MediaProvider(logger); var mediaProvider = new MediaProvider(logger);
var malClient = new MalClient(_globalSettings, logger); var malClient = new MalClient(_globalSettings, logger);
@ -137,9 +138,9 @@ namespace Geekbot.net
_services.AddSingleton<IMtgManaConverter>(mtgManaConverter); _services.AddSingleton<IMtgManaConverter>(mtgManaConverter);
_services.AddSingleton<IWikipediaClient>(wikipediaClient); _services.AddSingleton<IWikipediaClient>(wikipediaClient);
_services.AddSingleton<IRandomNumberGenerator>(randomNumberGenerator); _services.AddSingleton<IRandomNumberGenerator>(randomNumberGenerator);
_services.AddSingleton<DatabaseContext>(_database);
_services.AddSingleton(_globalSettings); _services.AddSingleton(_globalSettings);
_services.AddTransient<IHighscoreManager>(e => new HighscoreManager(_databaseInitializer.Initialize(), _userRepository)); _services.AddTransient<IHighscoreManager>(e => new HighscoreManager(_database, _userRepository));
_services.AddTransient(e => _databaseInitializer.Initialize());
logger.Information(LogSource.Geekbot, "Connecting to Discord"); 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, $"Now Connected as {_client.CurrentUser.Username} to {_client.Guilds.Count} Servers");
_logger.Information(LogSource.Geekbot, "Registering Stuff"); _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 errorHandler = new ErrorHandler(_logger, translationHandler, _runParameters.ExposeErrors);
var reactionListener = new ReactionListener(_redis.Db); var reactionListener = new ReactionListener(_redis.Db);
_services.AddSingleton<IErrorHandler>(errorHandler); _services.AddSingleton<IErrorHandler>(errorHandler);
@ -172,7 +173,7 @@ namespace Geekbot.net
_servicesProvider = _services.BuildServiceProvider(); _servicesProvider = _services.BuildServiceProvider();
await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _servicesProvider); 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.MessageReceived += handlers.RunCommand;
_client.MessageDeleted += handlers.MessageDeleted; _client.MessageDeleted += handlers.MessageDeleted;
@ -207,8 +208,8 @@ namespace Geekbot.net
private Task StartWebApi() private Task StartWebApi()
{ {
_logger.Information(LogSource.Api, "Starting Webserver"); _logger.Information(LogSource.Api, "Starting Webserver");
var highscoreManager = new HighscoreManager(_databaseInitializer.Initialize(), _userRepository); var highscoreManager = new HighscoreManager(_database, _userRepository);
WebApiStartup.StartWebApi(_logger, _runParameters, _commands, _databaseInitializer.Initialize(), _client, _globalSettings, highscoreManager); WebApiStartup.StartWebApi(_logger, _runParameters, _commands, _database, _client, _globalSettings, highscoreManager);
return Task.CompletedTask; return Task.CompletedTask;
} }
} }