2022-08-29 09:50:48 +02:00
|
|
|
|
using Umbraco.Cms.Core;
|
|
|
|
|
|
using Umbraco.Cms.Core.Install;
|
2023-05-25 10:38:44 +02:00
|
|
|
|
using Umbraco.Cms.Core.Installer;
|
|
|
|
|
|
using Umbraco.Cms.Core.Models.Installer;
|
2022-08-29 09:50:48 +02:00
|
|
|
|
using Umbraco.Cms.Core.Services;
|
|
|
|
|
|
using Umbraco.Cms.Infrastructure.Migrations.Install;
|
|
|
|
|
|
|
2023-05-25 10:38:44 +02:00
|
|
|
|
namespace Umbraco.Cms.Infrastructure.Installer.Steps;
|
2022-08-29 09:50:48 +02:00
|
|
|
|
|
|
|
|
|
|
public class DatabaseInstallStep : IInstallStep, IUpgradeStep
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly IRuntimeState _runtime;
|
|
|
|
|
|
private readonly DatabaseBuilder _databaseBuilder;
|
|
|
|
|
|
|
|
|
|
|
|
public DatabaseInstallStep(IRuntimeState runtime, DatabaseBuilder databaseBuilder)
|
|
|
|
|
|
{
|
|
|
|
|
|
_runtime = runtime;
|
|
|
|
|
|
_databaseBuilder = databaseBuilder;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task ExecuteAsync(InstallData _) => Execute();
|
|
|
|
|
|
|
|
|
|
|
|
public Task ExecuteAsync() => Execute();
|
|
|
|
|
|
|
|
|
|
|
|
private Task Execute()
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
if (_runtime.Reason == RuntimeLevelReason.InstallMissingDatabase)
|
|
|
|
|
|
{
|
|
|
|
|
|
_databaseBuilder.CreateDatabase();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DatabaseBuilder.Result? result = _databaseBuilder.CreateSchemaAndData();
|
|
|
|
|
|
|
|
|
|
|
|
if (result?.Success == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new InstallException("The database failed to install. ERROR: " + result.Message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task<bool> RequiresExecutionAsync(InstallData _) => ShouldExecute();
|
|
|
|
|
|
|
|
|
|
|
|
public Task<bool> RequiresExecutionAsync() => ShouldExecute();
|
|
|
|
|
|
|
|
|
|
|
|
private Task<bool> ShouldExecute()
|
|
|
|
|
|
=> Task.FromResult(true);
|
|
|
|
|
|
}
|