From 9d716b7f7d69beff3cb17c1801fb0cbaae785e47 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Wed, 25 Nov 2020 21:09:09 +0000 Subject: [PATCH] Added a new Migrate option to run the migrations in and exit --- src/Ombi/Program.cs | 63 ++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/src/Ombi/Program.cs b/src/Ombi/Program.cs index 30ed06f01..4eae1c7f3 100644 --- a/src/Ombi/Program.cs +++ b/src/Ombi/Program.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using System.Linq; using System.Text; using Microsoft.AspNetCore.Hosting; @@ -7,14 +6,13 @@ using Ombi.Store.Context; using Ombi.Store.Entities; using CommandLine; using CommandLine.Text; -using Microsoft.AspNetCore; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection; using Ombi.Extensions; using Ombi.Helpers; -using Ombi.Store.Context.MySql; -using Ombi.Store.Context.Sqlite; +using System.Threading.Tasks; +using System.Collections.Generic; namespace Ombi { @@ -22,7 +20,7 @@ namespace Ombi { private static string UrlArgs { get; set; } - public static void Main(string[] args) + public static async Task Main(string[] args) { Console.Title = "Ombi"; @@ -30,6 +28,7 @@ namespace Ombi var storagePath = string.Empty; var baseUrl = string.Empty; var demo = false; + var migrate = false; var result = Parser.Default.ParseArguments(args) .WithParsed(o => { @@ -37,6 +36,7 @@ namespace Ombi storagePath = o.StoragePath; baseUrl = o.BaseUrl; demo = o.Demo; + migrate = o.Migrate; }).WithNotParsed(err => { foreach (var e in err) @@ -62,11 +62,25 @@ namespace Ombi { var settingsDb = provider.GetRequiredService(); - var config = settingsDb.ApplicationConfigurations.ToList(); + if (migrate) + { + var migrationTasks = new List(); + var externalDb = provider.GetRequiredService(); + var ombiDb = provider.GetRequiredService(); + migrationTasks.Add(settingsDb.Database.MigrateAsync()); + migrationTasks.Add(ombiDb.Database.MigrateAsync()); + migrationTasks.Add(externalDb.Database.MigrateAsync()); + + Task.WaitAll(migrationTasks.ToArray()); + + Environment.Exit(0); + } + + var config = await settingsDb.ApplicationConfigurations.ToListAsync(); var url = config.FirstOrDefault(x => x.Type == ConfigurationTypes.Url); var dbBaseUrl = config.FirstOrDefault(x => x.Type == ConfigurationTypes.BaseUrl); var securityToken = config.FirstOrDefault(x => x.Type == ConfigurationTypes.SecurityToken); - CheckSecurityToken(securityToken, settingsDb, instance); + await CheckSecurityToken(securityToken, settingsDb, instance); if (url == null) { url = new ApplicationConfiguration @@ -74,11 +88,11 @@ namespace Ombi Type = ConfigurationTypes.Url, Value = "http://*:5000" }; - using (var tran = settingsDb.Database.BeginTransaction()) + using (var tran = await settingsDb.Database.BeginTransactionAsync()) { settingsDb.ApplicationConfigurations.Add(url); - settingsDb.SaveChanges(); - tran.Commit(); + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); } urlValue = url.Value; @@ -88,10 +102,10 @@ namespace Ombi { url.Value = UrlArgs; - using (var tran = settingsDb.Database.BeginTransaction()) + using (var tran = await settingsDb.Database.BeginTransactionAsync()) { - settingsDb.SaveChanges(); - tran.Commit(); + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); } urlValue = url.Value; @@ -111,11 +125,11 @@ namespace Ombi Value = baseUrl }; - using (var tran = settingsDb.Database.BeginTransaction()) + using (var tran = await settingsDb.Database.BeginTransactionAsync()) { settingsDb.ApplicationConfigurations.Add(dbBaseUrl); - settingsDb.SaveChanges(); - tran.Commit(); + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); } } } @@ -123,10 +137,10 @@ namespace Ombi { dbBaseUrl.Value = baseUrl; - using (var tran = settingsDb.Database.BeginTransaction()) + using (var tran = await settingsDb.Database.BeginTransactionAsync()) { - settingsDb.SaveChanges(); - tran.Commit(); + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); } } @@ -136,7 +150,7 @@ namespace Ombi } } - private static void CheckSecurityToken(ApplicationConfiguration securityToken, SettingsContext ctx, StartupSingleton instance) + private static async Task CheckSecurityToken(ApplicationConfiguration securityToken, SettingsContext ctx, StartupSingleton instance) { if (securityToken == null || string.IsNullOrEmpty(securityToken.Value)) { @@ -146,11 +160,11 @@ namespace Ombi Value = Guid.NewGuid().ToString("N") }; - using (var tran = ctx.Database.BeginTransaction()) + using (var tran = await ctx.Database.BeginTransactionAsync()) { ctx.ApplicationConfigurations.Add(securityToken); - ctx.SaveChanges(); - tran.Commit(); + await ctx.SaveChangesAsync(); + await tran.CommitAsync(); } } @@ -199,5 +213,8 @@ namespace Ombi [Option("demo", Required = false, HelpText = "Demo mode, you will never need to use this, fuck that fruit company...")] public bool Demo { get; set; } + [Option("migrate", Required = false, HelpText = "Will run the migrations then exit the application")] + public bool Migrate { get; set; } + } }