* 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>
50 lines
1.5 KiB
C#
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);
|
|
}
|