Migrate to HTMX (#114)

Dropped Livewire
Added HTMX
Added Blade code lint
Drop Mysql and Redis
Migrate to SQLite
This commit is contained in:
Saeed Vaziry
2024-03-06 17:02:59 +01:00
committed by GitHub
parent 5b2c419e91
commit b2083fc6b2
486 changed files with 8609 additions and 8707 deletions

View File

@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\NotificationChannels\AddChannel;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Http\Controllers\Controller;
use App\Models\NotificationChannel;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class NotificationChannelController extends Controller
{
public function index(): View
{
return view('settings.notification-channels.index', [
'channels' => NotificationChannel::query()->latest()->get(),
]);
}
public function add(Request $request): HtmxResponse
{
app(AddChannel::class)->add(
$request->user(),
$request->input()
);
Toast::success('Channel added successfully');
return htmx()->redirect(route('notification-channels'));
}
public function delete(int $id): RedirectResponse
{
$channel = NotificationChannel::query()->findOrFail($id);
$channel->delete();
Toast::success('Channel deleted successfully');
return redirect()->route('notification-channels');
}
}

View File

@ -0,0 +1,43 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\User\UpdateUserPassword;
use App\Actions\User\UpdateUserProfileInformation;
use App\Facades\Toast;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function index(): View
{
return view('settings.profile.index');
}
public function info(Request $request): RedirectResponse
{
app(UpdateUserProfileInformation::class)->update(
$request->user(),
$request->input()
);
Toast::success('Profile information updated.');
return back();
}
public function password(Request $request): RedirectResponse
{
app(UpdateUserPassword::class)->update(
$request->user(),
$request->input()
);
Toast::success('Password updated.');
return back();
}
}

View File

@ -0,0 +1,79 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\Projects\CreateProject;
use App\Actions\Projects\DeleteProject;
use App\Actions\Projects\UpdateProject;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Http\Controllers\Controller;
use App\Models\Project;
use App\Models\User;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
class ProjectController extends Controller
{
public function index(): View
{
return view('settings.projects.index', [
'projects' => auth()->user()->projects,
]);
}
public function create(Request $request): HtmxResponse
{
app(CreateProject::class)->create($request->user(), $request->input());
Toast::success('Project created.');
return htmx()->redirect(route('projects'));
}
public function update(Request $request, Project $project): HtmxResponse
{
/** @var Project $project */
$project = $request->user()->projects()->findOrFail($project->id);
app(UpdateProject::class)->update($project, $request->input());
Toast::success('Project updated.');
return htmx()->redirect(route('projects'));
}
public function delete(Project $project): RedirectResponse
{
/** @var Project $project */
$project = auth()->user()->projects()->findOrFail($project->id);
try {
app(DeleteProject::class)->delete(auth()->user(), $project);
} catch (ValidationException $e) {
Toast::error($e->getMessage());
return back();
}
Toast::success('Project deleted.');
return back();
}
public function switch($projectId): RedirectResponse
{
/** @var User $user */
$user = auth()->user();
/** @var Project $project */
$project = $user->projects()->findOrFail($projectId);
$user->current_project_id = $project->id;
$user->save();
return redirect()->route('servers');
}
}

View File

@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\SshKey\CreateSshKey;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Http\Controllers\Controller;
use App\Models\SshKey;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class SSHKeyController extends Controller
{
public function index(): View
{
return view('settings.ssh-keys.index', [
'keys' => SshKey::query()->latest()->get(),
]);
}
public function add(Request $request): HtmxResponse
{
app(CreateSshKey::class)->create(
$request->user(),
$request->input()
);
Toast::success('SSH Key added');
return htmx()->redirect(route('ssh-keys'));
}
public function delete(int $id): RedirectResponse
{
$key = SshKey::query()->findOrFail($id);
$key->delete();
Toast::success('SSH Key deleted');
return redirect()->route('ssh-keys');
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\ServerProvider\CreateServerProvider;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Http\Controllers\Controller;
use App\Models\ServerProvider;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class ServerProviderController extends Controller
{
public function index(): View
{
return view('settings.server-providers.index', [
'providers' => auth()->user()->serverProviders,
]);
}
public function connect(Request $request): HtmxResponse
{
app(CreateServerProvider::class)->create(
$request->user(),
$request->input()
);
Toast::success('Server provider connected.');
return htmx()->redirect(route('server-providers'));
}
/**
* @TODO Update servers using this provider
*/
public function delete(int $id): RedirectResponse
{
$serverProvider = ServerProvider::query()->findOrFail($id);
$serverProvider->delete();
Toast::success('Server provider deleted.');
return back();
}
}

View File

@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\SourceControl\ConnectSourceControl;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Http\Controllers\Controller;
use App\Models\SourceControl;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
/**
* @TODO Assign user to source control
*/
class SourceControlController extends Controller
{
public function index(): View
{
return view('settings.source-controls.index', [
'sourceControls' => SourceControl::query()->orderByDesc('id')->get(),
]);
}
public function connect(Request $request): HtmxResponse
{
app(ConnectSourceControl::class)->connect(
$request->input(),
);
Toast::success('Source control connected.');
return htmx()->redirect(route('source-controls'));
}
public function delete(int $id): RedirectResponse
{
$sourceControl = SourceControl::query()->findOrFail($id);
$sourceControl->delete();
Toast::success('Source control deleted.');
return redirect()->route('source-controls');
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\StorageProvider\CreateStorageProvider;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Http\Controllers\Controller;
use App\Models\StorageProvider;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class StorageProviderController extends Controller
{
public function index(): View
{
return view('settings.storage-providers.index', [
'providers' => auth()->user()->storageProviders,
]);
}
public function connect(Request $request): HtmxResponse
{
app(CreateStorageProvider::class)->create(
$request->user(),
$request->input()
);
Toast::success('Storage provider connected.');
return htmx()->redirect(route('storage-providers'));
}
/**
* @TODO Update servers using this provider
*/
public function delete(int $id): RedirectResponse
{
$storageProvider = StorageProvider::query()->findOrFail($id);
$storageProvider->delete();
Toast::success('Storage provider deleted.');
return back();
}
}