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 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<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,
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;

View file

@ -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<IMtgManaConverter>(mtgManaConverter);
_services.AddSingleton<IWikipediaClient>(wikipediaClient);
_services.AddSingleton<IRandomNumberGenerator>(randomNumberGenerator);
_services.AddSingleton<DatabaseContext>(_database);
_services.AddSingleton(_globalSettings);
_services.AddTransient<IHighscoreManager>(e => new HighscoreManager(_databaseInitializer.Initialize(), _userRepository));
_services.AddTransient(e => _databaseInitializer.Initialize());
_services.AddTransient<IHighscoreManager>(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<IErrorHandler>(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;
}
}