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
|
|
|
|
|
2024-01-30 13:12:08 +01:00
|
|
|
|
public class DatabaseInstallStep : StepBase, IInstallStep, IUpgradeStep
|
2022-08-29 09:50:48 +02:00
|
|
|
|
{
|
|
|
|
|
|
private readonly IRuntimeState _runtime;
|
|
|
|
|
|
private readonly DatabaseBuilder _databaseBuilder;
|
|
|
|
|
|
|
|
|
|
|
|
public DatabaseInstallStep(IRuntimeState runtime, DatabaseBuilder databaseBuilder)
|
|
|
|
|
|
{
|
|
|
|
|
|
_runtime = runtime;
|
|
|
|
|
|
_databaseBuilder = databaseBuilder;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-01-30 13:12:08 +01:00
|
|
|
|
public Task<Attempt<InstallationResult>> ExecuteAsync(InstallData _) => Execute();
|
2022-08-29 09:50:48 +02:00
|
|
|
|
|
2024-01-30 13:12:08 +01:00
|
|
|
|
public Task<Attempt<InstallationResult>> ExecuteAsync() => Execute();
|
2022-08-29 09:50:48 +02:00
|
|
|
|
|
2024-01-30 13:12:08 +01:00
|
|
|
|
private Task<Attempt<InstallationResult>> Execute()
|
2022-08-29 09:50:48 +02:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
if (_runtime.Reason == RuntimeLevelReason.InstallMissingDatabase)
|
|
|
|
|
|
{
|
|
|
|
|
|
_databaseBuilder.CreateDatabase();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DatabaseBuilder.Result? result = _databaseBuilder.CreateSchemaAndData();
|
|
|
|
|
|
|
|
|
|
|
|
if (result?.Success == false)
|
|
|
|
|
|
{
|
2024-01-30 13:12:08 +01:00
|
|
|
|
return Task.FromResult(FailWithMessage("The database failed to install. ERROR: " + result.Message));
|
2022-08-29 09:50:48 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-01-30 13:12:08 +01:00
|
|
|
|
return Task.FromResult(Success());
|
2022-08-29 09:50:48 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task<bool> RequiresExecutionAsync(InstallData _) => ShouldExecute();
|
|
|
|
|
|
|
|
|
|
|
|
public Task<bool> RequiresExecutionAsync() => ShouldExecute();
|
|
|
|
|
|
|
|
|
|
|
|
private Task<bool> ShouldExecute()
|
|
|
|
|
|
=> Task.FromResult(true);
|
|
|
|
|
|
}
|