using Microsoft.Extensions.Logging; using MySqlConnector; using SharpChat.Configuration; using SharpChat.Messages; using SharpChat.Storage; using ZLogger; namespace SharpChat.MariaDB; public class MariaDBStorage(ILogger logger, string connString) : StorageBackend { public async Task<MariaDBConnection> CreateConnection() { MySqlConnection conn = new(connString); await conn.OpenAsync(); return new MariaDBConnection(conn); } public MessageStorage CreateMessageStorage() { return new MariaDBMessageStorage(this, logger); } public async Task UpgradeStorage() { logger.ZLogInformation($"Upgrading storage..."); using MariaDBConnection conn = await CreateConnection(); await new MariaDBMigrations(logger, conn).RunMigrations(); } public static string BuildConnectionString(Config config) { return BuildConnectionString( config.ReadValue("host", "localhost"), config.ReadValue("user", string.Empty), config.ReadValue("pass", string.Empty), config.ReadValue("db", "sharpchat") ); } public static string BuildConnectionString(string? host, string? username, string? password, string? database) { return new MySqlConnectionStringBuilder { Server = host, UserID = username, Password = password, Database = database, OldGuids = false, TreatTinyAsBoolean = false, CharacterSet = "utf8mb4", SslMode = MySqlSslMode.None, ForceSynchronous = false, ConnectionTimeout = 5, DefaultCommandTimeout = 900, // fuck it, 15 minutes }.ToString(); } }