diff --git a/CS2-SimpleAdmin/Database/Migration.cs b/CS2-SimpleAdmin/Database/Migration.cs deleted file mode 100644 index 7a25747..0000000 --- a/CS2-SimpleAdmin/Database/Migration.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Data.Common; -using Microsoft.Extensions.Logging; - -namespace CS2_SimpleAdmin.Database; - -public class Migration(string migrationsPath) -{ - /// - /// Executes all migration scripts found in the configured migrations path that have not been applied yet. - /// Creates a migration tracking table if it does not exist. - /// Applies migration scripts in filename order and logs successes or failures. - /// - public async Task ExecuteMigrationsAsync() - { - if (CS2_SimpleAdmin.DatabaseProvider == null) return; - var files = Directory.GetFiles(migrationsPath, "*.sql").OrderBy(f => f).ToList(); - if (files.Count == 0) return; - - await using var connection = await CS2_SimpleAdmin.DatabaseProvider.CreateConnectionAsync(); - - await using (var cmd = connection.CreateCommand()) - { - cmd.CommandText = """ - CREATE TABLE IF NOT EXISTS sa_migrations ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - version TEXT NOT NULL - ); - - """; - - await cmd.ExecuteNonQueryAsync(); - } - - var lastAppliedVersion = await GetLastAppliedVersionAsync(connection); - - foreach (var file in files) - { - var version = Path.GetFileNameWithoutExtension(file); - if (string.Compare(version, lastAppliedVersion, StringComparison.OrdinalIgnoreCase) <= 0) - continue; - - try - { - var sqlScript = await File.ReadAllTextAsync(file); - - await using (var cmdMigration = connection.CreateCommand()) - { - cmdMigration.CommandText = sqlScript; - await cmdMigration.ExecuteNonQueryAsync(); - } - - await UpdateLastAppliedVersionAsync(connection, version); - - CS2_SimpleAdmin._logger?.LogInformation($"Migration \"{version}\" successfully applied."); - } - catch (Exception ex) - { - CS2_SimpleAdmin._logger?.LogError(ex, $"Error applying migration \"{version}\"."); - break; - } - } - } - - /// - /// Retrieves the version string of the last applied migration from the database. - /// - /// The open database connection. - /// The version string of the last applied migration, or empty string if none. - private static async Task GetLastAppliedVersionAsync(DbConnection connection) - { - await using var cmd = connection.CreateCommand(); - cmd.CommandText = "SELECT version FROM sa_migrations ORDER BY id DESC LIMIT 1;"; - var result = await cmd.ExecuteScalarAsync(); - return result?.ToString() ?? string.Empty; - } - - /// - /// Inserts a record tracking the successful application of a migration version. - /// - /// The open database connection. - /// The version string of the migration applied. - private static async Task UpdateLastAppliedVersionAsync(DbConnection connection, string version) - { - await using var cmd = connection.CreateCommand(); - cmd.CommandText = "INSERT INTO sa_migrations (version) VALUES (@Version);"; - - var param = cmd.CreateParameter(); - param.ParameterName = "@Version"; - param.Value = version; - cmd.Parameters.Add(param); - - await cmd.ExecuteNonQueryAsync(); - } -}