Files
Umbraco-CMS/src/Umbraco.Infrastructure/Installer/Steps/DatabaseInstallStep.cs
Mole 8c8405bbbf V14: Fix up install controller (#15646)
* Rename InstallVResponseModel to InstallRequestModel

* Align SettingsInstallController

* Rename split DatabaseInstallResponseModel in two

* Change UserInstallResponseModel to UserInstallViewModel

* Use PresentationModel instead of ViewModel

* Use operation status pattern when validating database

* Prepare for install to return a message

* Begin updating steps

* Make StepBase sharable between upgrade and install

* Update steps

* Use error message from install steps in install controller

* Use error message from upgrade steps in upgrade controller

* Use 500 for install/upgrade failed

It's entirely likely that it has nothing to do with the request

* Updated OpenApi.Json

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-01-30 13:12:08 +01:00

50 lines
1.5 KiB
C#

using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Install;
using Umbraco.Cms.Core.Installer;
using Umbraco.Cms.Core.Models.Installer;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Infrastructure.Migrations.Install;
namespace Umbraco.Cms.Infrastructure.Installer.Steps;
public class DatabaseInstallStep : StepBase, IInstallStep, IUpgradeStep
{
private readonly IRuntimeState _runtime;
private readonly DatabaseBuilder _databaseBuilder;
public DatabaseInstallStep(IRuntimeState runtime, DatabaseBuilder databaseBuilder)
{
_runtime = runtime;
_databaseBuilder = databaseBuilder;
}
public Task<Attempt<InstallationResult>> ExecuteAsync(InstallData _) => Execute();
public Task<Attempt<InstallationResult>> ExecuteAsync() => Execute();
private Task<Attempt<InstallationResult>> Execute()
{
if (_runtime.Reason == RuntimeLevelReason.InstallMissingDatabase)
{
_databaseBuilder.CreateDatabase();
}
DatabaseBuilder.Result? result = _databaseBuilder.CreateSchemaAndData();
if (result?.Success == false)
{
return Task.FromResult(FailWithMessage("The database failed to install. ERROR: " + result.Message));
}
return Task.FromResult(Success());
}
public Task<bool> RequiresExecutionAsync(InstallData _) => ShouldExecute();
public Task<bool> RequiresExecutionAsync() => ShouldExecute();
private Task<bool> ShouldExecute()
=> Task.FromResult(true);
}