Order migrations

This commit is contained in:
Kieran 2022-07-06 23:03:53 +01:00
parent 991a6c7713
commit cec5a01d5d
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
8 changed files with 46 additions and 2 deletions

View File

@ -173,7 +173,7 @@ if (!string.IsNullOrEmpty(voidSettings.Postgres))
if (voidSettings.HasRedis()) if (voidSettings.HasRedis())
{ {
services.AddTransient<ICache, RedisCache>(); services.AddTransient<ICache, RedisCache>();
// redis specific migrations // redis specific migrations
services.AddTransient<IMigration, UserLookupKeyHashMigration>(); services.AddTransient<IMigration, UserLookupKeyHashMigration>();
} }
@ -190,7 +190,7 @@ using (var migrationScope = app.Services.CreateScope())
{ {
var migrations = migrationScope.ServiceProvider.GetServices<IMigration>(); var migrations = migrationScope.ServiceProvider.GetServices<IMigration>();
var logger = migrationScope.ServiceProvider.GetRequiredService<ILogger<IMigration>>(); var logger = migrationScope.ServiceProvider.GetRequiredService<ILogger<IMigration>>();
foreach (var migration in migrations) foreach (var migration in migrations.OrderBy(a => a.Order))
{ {
logger.LogInformation("Running migration: {Migration}", migration.GetType().Name); logger.LogInformation("Running migration: {Migration}", migration.GetType().Name);
var res = await migration.Migrate(args); var res = await migration.Migrate(args);

View File

@ -3,6 +3,7 @@ using VoidCat.Services.Abstractions;
namespace VoidCat.Services.Migrations; namespace VoidCat.Services.Migrations;
/// <inheritdoc />
public class FixSize : IMigration public class FixSize : IMigration
{ {
private readonly ILogger<FixSize> _logger; private readonly ILogger<FixSize> _logger;
@ -16,6 +17,10 @@ public class FixSize : IMigration
_fileStore = fileStore; _fileStore = fileStore;
} }
/// <inheritdoc />
public int Order => 2;
/// <inheritdoc />
public async ValueTask<IMigration.MigrationResult> Migrate(string[] args) public async ValueTask<IMigration.MigrationResult> Migrate(string[] args)
{ {
var files = await _fileMetadata.ListFiles<SecretVoidFileMeta>(new(0, int.MaxValue)); var files = await _fileMetadata.ListFiles<SecretVoidFileMeta>(new(0, int.MaxValue));

View File

@ -2,6 +2,7 @@
namespace VoidCat.Services.Migrations; namespace VoidCat.Services.Migrations;
/// <inheritdoc />
public class FluentMigrationRunner : IMigration public class FluentMigrationRunner : IMigration
{ {
private readonly IMigrationRunner _runner; private readonly IMigrationRunner _runner;
@ -11,6 +12,10 @@ public class FluentMigrationRunner : IMigration
_runner = runner; _runner = runner;
} }
/// <inheritdoc />
public int Order => -1;
/// <inheritdoc />
public ValueTask<IMigration.MigrationResult> Migrate(string[] args) public ValueTask<IMigration.MigrationResult> Migrate(string[] args)
{ {
_runner.MigrateUp(); _runner.MigrateUp();

View File

@ -1,9 +1,25 @@
namespace VoidCat.Services.Migrations; namespace VoidCat.Services.Migrations;
/// <summary>
/// Startup migrations
/// </summary>
public interface IMigration public interface IMigration
{ {
/// <summary>
/// Order to run migrations
/// </summary>
int Order { get; }
/// <summary>
/// Run migration
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
ValueTask<MigrationResult> Migrate(string[] args); ValueTask<MigrationResult> Migrate(string[] args);
/// <summary>
/// Results of running migration
/// </summary>
public enum MigrationResult public enum MigrationResult
{ {
/// <summary> /// <summary>

View File

@ -3,6 +3,7 @@ using VoidCat.Model;
namespace VoidCat.Services.Migrations; namespace VoidCat.Services.Migrations;
/// <inheritdoc />
public abstract class MetadataMigrator<TOld, TNew> : IMigration public abstract class MetadataMigrator<TOld, TNew> : IMigration
{ {
private readonly VoidSettings _settings; private readonly VoidSettings _settings;
@ -14,6 +15,10 @@ public abstract class MetadataMigrator<TOld, TNew> : IMigration
_logger = logger; _logger = logger;
} }
/// <inheritdoc />
public int Order => 2;
/// <inheritdoc />
public async ValueTask<IMigration.MigrationResult> Migrate(string[] args) public async ValueTask<IMigration.MigrationResult> Migrate(string[] args)
{ {
var newMeta = Path.Combine(_settings.DataDirectory, OldPath); var newMeta = Path.Combine(_settings.DataDirectory, OldPath);

View File

@ -34,6 +34,9 @@ public class MigrateToPostgres : IMigration
_fileStore = fileStore; _fileStore = fileStore;
} }
/// <inheritdoc />
public int Order => 0;
/// <inheritdoc /> /// <inheritdoc />
public async ValueTask<IMigration.MigrationResult> Migrate(string[] args) public async ValueTask<IMigration.MigrationResult> Migrate(string[] args)
{ {

View File

@ -3,6 +3,7 @@ using VoidCat.Services.Abstractions;
namespace VoidCat.Services.Migrations; namespace VoidCat.Services.Migrations;
/// <inheritdoc />
public class PopulateMetadataId : IMigration public class PopulateMetadataId : IMigration
{ {
private readonly IFileMetadataStore _metadataStore; private readonly IFileMetadataStore _metadataStore;
@ -12,6 +13,10 @@ public class PopulateMetadataId : IMigration
_metadataStore = metadataStore; _metadataStore = metadataStore;
} }
/// <inheritdoc />
public int Order => 2;
/// <inheritdoc />
public async ValueTask<IMigration.MigrationResult> Migrate(string[] args) public async ValueTask<IMigration.MigrationResult> Migrate(string[] args)
{ {
if (!args.Contains("--add-metadata-id")) if (!args.Contains("--add-metadata-id"))

View File

@ -4,6 +4,7 @@ using VoidCat.Model;
namespace VoidCat.Services.Migrations; namespace VoidCat.Services.Migrations;
/// <inheritdoc />
public class UserLookupKeyHashMigration : IMigration public class UserLookupKeyHashMigration : IMigration
{ {
private readonly IDatabase _database; private readonly IDatabase _database;
@ -13,6 +14,10 @@ public class UserLookupKeyHashMigration : IMigration
_database = database; _database = database;
} }
/// <inheritdoc />
public int Order => 2;
/// <inheritdoc />
public async ValueTask<IMigration.MigrationResult> Migrate(string[] args) public async ValueTask<IMigration.MigrationResult> Migrate(string[] args)
{ {
var users = await _database.SetMembersAsync("users"); var users = await _database.SetMembersAsync("users");