mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-19 18:01:37 +00:00
87 lines
2.6 KiB
PHP
87 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Actions\Site\CreateSite;
|
|
use App\Actions\Site\DeleteSite;
|
|
use App\Enums\SiteStatus;
|
|
use App\Enums\SiteType;
|
|
use App\Facades\Toast;
|
|
use App\Helpers\HtmxResponse;
|
|
use App\Models\Server;
|
|
use App\Models\Site;
|
|
use App\Models\SourceControl;
|
|
use Illuminate\Contracts\View\View;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class SiteController extends Controller
|
|
{
|
|
public function index(Server $server): View
|
|
{
|
|
return view('sites.index', [
|
|
'server' => $server,
|
|
'sites' => $server->sites()->orderByDesc('id')->get(),
|
|
]);
|
|
}
|
|
|
|
public function store(Server $server, Request $request): HtmxResponse
|
|
{
|
|
$site = app(CreateSite::class)->create($server, $request->input());
|
|
|
|
Toast::success('Site created');
|
|
|
|
return htmx()->redirect(route('servers.sites.show', [$server, $site]));
|
|
}
|
|
|
|
public function create(Server $server): View
|
|
{
|
|
return view('sites.create', [
|
|
'server' => $server,
|
|
'type' => old('type', request()->query('type', SiteType::LARAVEL)),
|
|
'sourceControls' => SourceControl::all(),
|
|
]);
|
|
}
|
|
|
|
public function show(Server $server, Site $site, Request $request): View|RedirectResponse|HtmxResponse
|
|
{
|
|
if (in_array($site->status, [SiteStatus::INSTALLING, SiteStatus::INSTALLATION_FAILED])) {
|
|
if ($request->hasHeader('HX-Request')) {
|
|
return htmx()->redirect(route('servers.sites.installing', [$server, $site]));
|
|
}
|
|
|
|
return redirect()->route('servers.sites.installing', [$server, $site]);
|
|
}
|
|
|
|
return view('sites.show', [
|
|
'server' => $server,
|
|
'site' => $site,
|
|
]);
|
|
}
|
|
|
|
public function installing(Server $server, Site $site, Request $request): View|RedirectResponse|HtmxResponse
|
|
{
|
|
if (! in_array($site->status, [SiteStatus::INSTALLING, SiteStatus::INSTALLATION_FAILED])) {
|
|
if ($request->hasHeader('HX-Request')) {
|
|
return htmx()->redirect(route('servers.sites.show', [$server, $site]));
|
|
}
|
|
|
|
return redirect()->route('servers.sites.show', [$server, $site]);
|
|
}
|
|
|
|
return view('sites.installing', [
|
|
'server' => $server,
|
|
'site' => $site,
|
|
]);
|
|
}
|
|
|
|
public function destroy(Server $server, Site $site): RedirectResponse
|
|
{
|
|
app(DeleteSite::class)->delete($site);
|
|
|
|
Toast::success('Site is being deleted');
|
|
|
|
return redirect()->route('servers.sites', $server);
|
|
}
|
|
}
|