Added a new Migrate option to run the migrations in and exit

pull/3895/head
tidusjar 4 years ago
parent a6cce3362e
commit 9d716b7f7d

@ -1,5 +1,4 @@
using System; using System;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
@ -7,14 +6,13 @@ using Ombi.Store.Context;
using Ombi.Store.Entities; using Ombi.Store.Entities;
using CommandLine; using CommandLine;
using CommandLine.Text; using CommandLine.Text;
using Microsoft.AspNetCore;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Ombi.Extensions; using Ombi.Extensions;
using Ombi.Helpers; using Ombi.Helpers;
using Ombi.Store.Context.MySql; using System.Threading.Tasks;
using Ombi.Store.Context.Sqlite; using System.Collections.Generic;
namespace Ombi namespace Ombi
{ {
@ -22,7 +20,7 @@ namespace Ombi
{ {
private static string UrlArgs { get; set; } private static string UrlArgs { get; set; }
public static void Main(string[] args) public static async Task Main(string[] args)
{ {
Console.Title = "Ombi"; Console.Title = "Ombi";
@ -30,6 +28,7 @@ namespace Ombi
var storagePath = string.Empty; var storagePath = string.Empty;
var baseUrl = string.Empty; var baseUrl = string.Empty;
var demo = false; var demo = false;
var migrate = false;
var result = Parser.Default.ParseArguments<Options>(args) var result = Parser.Default.ParseArguments<Options>(args)
.WithParsed(o => .WithParsed(o =>
{ {
@ -37,6 +36,7 @@ namespace Ombi
storagePath = o.StoragePath; storagePath = o.StoragePath;
baseUrl = o.BaseUrl; baseUrl = o.BaseUrl;
demo = o.Demo; demo = o.Demo;
migrate = o.Migrate;
}).WithNotParsed(err => }).WithNotParsed(err =>
{ {
foreach (var e in err) foreach (var e in err)
@ -62,11 +62,25 @@ namespace Ombi
{ {
var settingsDb = provider.GetRequiredService<SettingsContext>(); var settingsDb = provider.GetRequiredService<SettingsContext>();
var config = settingsDb.ApplicationConfigurations.ToList(); if (migrate)
{
var migrationTasks = new List<Task>();
var externalDb = provider.GetRequiredService<ExternalContext>();
var ombiDb = provider.GetRequiredService<OmbiContext>();
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 url = config.FirstOrDefault(x => x.Type == ConfigurationTypes.Url);
var dbBaseUrl = config.FirstOrDefault(x => x.Type == ConfigurationTypes.BaseUrl); var dbBaseUrl = config.FirstOrDefault(x => x.Type == ConfigurationTypes.BaseUrl);
var securityToken = config.FirstOrDefault(x => x.Type == ConfigurationTypes.SecurityToken); var securityToken = config.FirstOrDefault(x => x.Type == ConfigurationTypes.SecurityToken);
CheckSecurityToken(securityToken, settingsDb, instance); await CheckSecurityToken(securityToken, settingsDb, instance);
if (url == null) if (url == null)
{ {
url = new ApplicationConfiguration url = new ApplicationConfiguration
@ -74,11 +88,11 @@ namespace Ombi
Type = ConfigurationTypes.Url, Type = ConfigurationTypes.Url,
Value = "http://*:5000" Value = "http://*:5000"
}; };
using (var tran = settingsDb.Database.BeginTransaction()) using (var tran = await settingsDb.Database.BeginTransactionAsync())
{ {
settingsDb.ApplicationConfigurations.Add(url); settingsDb.ApplicationConfigurations.Add(url);
settingsDb.SaveChanges(); await settingsDb.SaveChangesAsync();
tran.Commit(); await tran.CommitAsync();
} }
urlValue = url.Value; urlValue = url.Value;
@ -88,10 +102,10 @@ namespace Ombi
{ {
url.Value = UrlArgs; url.Value = UrlArgs;
using (var tran = settingsDb.Database.BeginTransaction()) using (var tran = await settingsDb.Database.BeginTransactionAsync())
{ {
settingsDb.SaveChanges(); await settingsDb.SaveChangesAsync();
tran.Commit(); await tran.CommitAsync();
} }
urlValue = url.Value; urlValue = url.Value;
@ -111,11 +125,11 @@ namespace Ombi
Value = baseUrl Value = baseUrl
}; };
using (var tran = settingsDb.Database.BeginTransaction()) using (var tran = await settingsDb.Database.BeginTransactionAsync())
{ {
settingsDb.ApplicationConfigurations.Add(dbBaseUrl); settingsDb.ApplicationConfigurations.Add(dbBaseUrl);
settingsDb.SaveChanges(); await settingsDb.SaveChangesAsync();
tran.Commit(); await tran.CommitAsync();
} }
} }
} }
@ -123,10 +137,10 @@ namespace Ombi
{ {
dbBaseUrl.Value = baseUrl; dbBaseUrl.Value = baseUrl;
using (var tran = settingsDb.Database.BeginTransaction()) using (var tran = await settingsDb.Database.BeginTransactionAsync())
{ {
settingsDb.SaveChanges(); await settingsDb.SaveChangesAsync();
tran.Commit(); 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)) if (securityToken == null || string.IsNullOrEmpty(securityToken.Value))
{ {
@ -146,11 +160,11 @@ namespace Ombi
Value = Guid.NewGuid().ToString("N") Value = Guid.NewGuid().ToString("N")
}; };
using (var tran = ctx.Database.BeginTransaction()) using (var tran = await ctx.Database.BeginTransactionAsync())
{ {
ctx.ApplicationConfigurations.Add(securityToken); ctx.ApplicationConfigurations.Add(securityToken);
ctx.SaveChanges(); await ctx.SaveChangesAsync();
tran.Commit(); 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...")] [Option("demo", Required = false, HelpText = "Demo mode, you will never need to use this, fuck that fruit company...")]
public bool Demo { get; set; } public bool Demo { get; set; }
[Option("migrate", Required = false, HelpText = "Will run the migrations then exit the application")]
public bool Migrate { get; set; }
} }
} }

Loading…
Cancel
Save