diff --git a/VoidCat/Program.cs b/VoidCat/Program.cs index 21fab56..8f3cbd5 100644 --- a/VoidCat/Program.cs +++ b/VoidCat/Program.cs @@ -173,7 +173,7 @@ if (!string.IsNullOrEmpty(voidSettings.Postgres)) if (voidSettings.HasRedis()) { services.AddTransient(); - + // redis specific migrations services.AddTransient(); } @@ -190,7 +190,7 @@ using (var migrationScope = app.Services.CreateScope()) { var migrations = migrationScope.ServiceProvider.GetServices(); var logger = migrationScope.ServiceProvider.GetRequiredService>(); - foreach (var migration in migrations) + foreach (var migration in migrations.OrderBy(a => a.Order)) { logger.LogInformation("Running migration: {Migration}", migration.GetType().Name); var res = await migration.Migrate(args); diff --git a/VoidCat/Services/Migrations/FixSize.cs b/VoidCat/Services/Migrations/FixSize.cs index 599d103..22869ae 100644 --- a/VoidCat/Services/Migrations/FixSize.cs +++ b/VoidCat/Services/Migrations/FixSize.cs @@ -3,6 +3,7 @@ using VoidCat.Services.Abstractions; namespace VoidCat.Services.Migrations; +/// public class FixSize : IMigration { private readonly ILogger _logger; @@ -16,6 +17,10 @@ public class FixSize : IMigration _fileStore = fileStore; } + /// + public int Order => 2; + + /// public async ValueTask Migrate(string[] args) { var files = await _fileMetadata.ListFiles(new(0, int.MaxValue)); diff --git a/VoidCat/Services/Migrations/FluentMigrationRunner.cs b/VoidCat/Services/Migrations/FluentMigrationRunner.cs index 0b2a79e..15ca921 100644 --- a/VoidCat/Services/Migrations/FluentMigrationRunner.cs +++ b/VoidCat/Services/Migrations/FluentMigrationRunner.cs @@ -2,6 +2,7 @@ namespace VoidCat.Services.Migrations; +/// public class FluentMigrationRunner : IMigration { private readonly IMigrationRunner _runner; @@ -11,6 +12,10 @@ public class FluentMigrationRunner : IMigration _runner = runner; } + /// + public int Order => -1; + + /// public ValueTask Migrate(string[] args) { _runner.MigrateUp(); diff --git a/VoidCat/Services/Migrations/IMigration.cs b/VoidCat/Services/Migrations/IMigration.cs index cf870cd..2a653af 100644 --- a/VoidCat/Services/Migrations/IMigration.cs +++ b/VoidCat/Services/Migrations/IMigration.cs @@ -1,9 +1,25 @@ namespace VoidCat.Services.Migrations; +/// +/// Startup migrations +/// public interface IMigration { + /// + /// Order to run migrations + /// + int Order { get; } + + /// + /// Run migration + /// + /// + /// ValueTask Migrate(string[] args); + /// + /// Results of running migration + /// public enum MigrationResult { /// diff --git a/VoidCat/Services/Migrations/MetadataMigrator.cs b/VoidCat/Services/Migrations/MetadataMigrator.cs index 67e796a..151f66f 100644 --- a/VoidCat/Services/Migrations/MetadataMigrator.cs +++ b/VoidCat/Services/Migrations/MetadataMigrator.cs @@ -3,6 +3,7 @@ using VoidCat.Model; namespace VoidCat.Services.Migrations; +/// public abstract class MetadataMigrator : IMigration { private readonly VoidSettings _settings; @@ -14,6 +15,10 @@ public abstract class MetadataMigrator : IMigration _logger = logger; } + /// + public int Order => 2; + + /// public async ValueTask Migrate(string[] args) { var newMeta = Path.Combine(_settings.DataDirectory, OldPath); diff --git a/VoidCat/Services/Migrations/MigrateToPostgres.cs b/VoidCat/Services/Migrations/MigrateToPostgres.cs index d67e04f..be448cb 100644 --- a/VoidCat/Services/Migrations/MigrateToPostgres.cs +++ b/VoidCat/Services/Migrations/MigrateToPostgres.cs @@ -34,6 +34,9 @@ public class MigrateToPostgres : IMigration _fileStore = fileStore; } + /// + public int Order => 0; + /// public async ValueTask Migrate(string[] args) { diff --git a/VoidCat/Services/Migrations/PopulateMetadataId.cs b/VoidCat/Services/Migrations/PopulateMetadataId.cs index dc55935..9f887fe 100644 --- a/VoidCat/Services/Migrations/PopulateMetadataId.cs +++ b/VoidCat/Services/Migrations/PopulateMetadataId.cs @@ -3,6 +3,7 @@ using VoidCat.Services.Abstractions; namespace VoidCat.Services.Migrations; +/// public class PopulateMetadataId : IMigration { private readonly IFileMetadataStore _metadataStore; @@ -12,6 +13,10 @@ public class PopulateMetadataId : IMigration _metadataStore = metadataStore; } + /// + public int Order => 2; + + /// public async ValueTask Migrate(string[] args) { if (!args.Contains("--add-metadata-id")) diff --git a/VoidCat/Services/Migrations/UserLookupKeyHashMigration.cs b/VoidCat/Services/Migrations/UserLookupKeyHashMigration.cs index 16f7df7..9bed290 100644 --- a/VoidCat/Services/Migrations/UserLookupKeyHashMigration.cs +++ b/VoidCat/Services/Migrations/UserLookupKeyHashMigration.cs @@ -4,6 +4,7 @@ using VoidCat.Model; namespace VoidCat.Services.Migrations; +/// public class UserLookupKeyHashMigration : IMigration { private readonly IDatabase _database; @@ -13,6 +14,10 @@ public class UserLookupKeyHashMigration : IMigration _database = database; } + /// + public int Order => 2; + + /// public async ValueTask Migrate(string[] args) { var users = await _database.SetMembersAsync("users");