72 lines
2.0 KiB
PHP
72 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace Lucent\Http\Controller;
|
|
|
|
use Illuminate\Contracts\View\View;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Lucent\Account\AccountService;
|
|
use Lucent\Channel\ChannelService;
|
|
use Lucent\Setup\Data\SetupStep;
|
|
use Lucent\Setup\Data\SetupStepStatus;
|
|
use Lucent\Setup\Step\ComposerStep;
|
|
use Lucent\Setup\Step\DatabaseSetupStep;
|
|
use Lucent\Setup\Step\IStep;
|
|
use Lucent\Setup\Step\LaravelEnvStep;
|
|
use Lucent\Setup\Step\LucentConfigStep;
|
|
use Lucent\Setup\Step\StorageLinkSetupStep;
|
|
use Lucent\Setup\Step\StorageSetupStep;
|
|
use Lucent\Svelte\Svelte;
|
|
|
|
class SetupController
|
|
{
|
|
public function __construct(
|
|
private readonly AccountService $accountService,
|
|
private readonly ChannelService $channelService,
|
|
private readonly Svelte $svelte,
|
|
) {}
|
|
|
|
public function setup(Request $request): View|RedirectResponse
|
|
{
|
|
$steps = array_reduce(
|
|
[
|
|
new ComposerStep(),
|
|
new LucentConfigStep(),
|
|
new LaravelEnvStep(),
|
|
new StorageSetupStep(),
|
|
new StorageLinkSetupStep(),
|
|
new DatabaseSetupStep(),
|
|
],
|
|
fn(array $carry, IStep $setupStep) => array_merge($carry, [
|
|
$setupStep(),
|
|
]),
|
|
[],
|
|
);
|
|
$allSuccess = array_reduce(
|
|
$steps,
|
|
fn(bool $carry, SetupStep $step) => !$carry
|
|
? false
|
|
: $step->status === SetupStepStatus::SUCCESS,
|
|
true,
|
|
);
|
|
|
|
if ($allSuccess) {
|
|
if ($this->accountService->countUsers() > 0) {
|
|
return redirect(
|
|
$this->channelService->channel->lucentUrl . "/login",
|
|
);
|
|
}
|
|
}
|
|
|
|
return $this->svelte->render(
|
|
layout: "account",
|
|
view: "setup",
|
|
title: "Setup Lucent",
|
|
data: [
|
|
"steps" => $steps,
|
|
"allSuccess" => $allSuccess,
|
|
],
|
|
);
|
|
}
|
|
}
|