Backup on Migrations (#898)

* Refactored how the migrations are run.

* A backup will be performed before any migrations. Added additional guards before a sub-module is loaded.
This commit is contained in:
Joseph Milazzo 2022-01-05 12:47:01 -08:00 committed by GitHub
parent 2bf1b96411
commit 027b8b78e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 62 additions and 22 deletions

View file

@ -36,7 +36,6 @@ namespace API
var isDocker = new OsInfo(Array.Empty<IOsVersionAdapter>()).IsDocker;
// TODO: Figure out a solution for this migration and logger.
var directoryService = new DirectoryService(null, new FileSystem());
MigrateConfigFiles.Migrate(isDocker, directoryService);
@ -58,7 +57,7 @@ namespace API
try
{
var context = services.GetRequiredService<DataContext>();
var roleManager = services.GetRequiredService<RoleManager<AppRole>>();
if (isDocker && new FileInfo("data/appsettings.json").Exists)
{
@ -81,28 +80,27 @@ namespace API
requiresCoverImageMigration = false;
}
// Apply all migrations on startup
// If we have pending migrations, make a backup first
var pendingMigrations = await context.Database.GetPendingMigrationsAsync();
if (pendingMigrations.Any())
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Performing backup as migrations are needed");
// var backupService = services.GetRequiredService<BackupService>();
// await backupService.BackupDatabase();
}
await context.Database.MigrateAsync();
if (requiresCoverImageMigration)
{
await MigrateCoverImages.UpdateDatabaseWithImages(context, directoryService);
}
await Seed.SeedRoles(roleManager);
await Seed.SeedSettings(context, directoryService);
await Seed.SeedUserApiKeys(context);
// // Apply all migrations on startup
// // If we have pending migrations, make a backup first
// var pendingMigrations = await context.Database.GetPendingMigrationsAsync();
// if (pendingMigrations.Any())
// {
// var logger = services.GetRequiredService<ILogger<Program>>();
// logger.LogInformation("Performing backup as migrations are needed");
// // var backupService = services.GetRequiredService<BackupService>();
// // await backupService.BackupDatabase();
// }
//
// await context.Database.MigrateAsync();
//
// await Seed.SeedRoles(roleManager);
// await Seed.SeedSettings(context, directoryService);
// await Seed.SeedUserApiKeys(context);
}
catch (Exception ex)
{