User management (#185)

This commit is contained in:
Saeed Vaziry
2024-04-29 20:58:04 +02:00
committed by GitHub
parent 35f896eab1
commit d846acaa8d
106 changed files with 1490 additions and 434 deletions

View File

@ -29,7 +29,7 @@ public function add(Request $request): HtmxResponse
Toast::success('Channel added successfully');
return htmx()->redirect(route('notification-channels'));
return htmx()->redirect(route('settings.notification-channels'));
}
public function delete(int $id): RedirectResponse
@ -40,6 +40,6 @@ public function delete(int $id): RedirectResponse
Toast::success('Channel deleted successfully');
return redirect()->route('notification-channels');
return redirect()->route('settings.notification-channels');
}
}

View File

@ -1,43 +0,0 @@
<?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

@ -20,7 +20,7 @@ class ProjectController extends Controller
public function index(): View
{
return view('settings.projects.index', [
'projects' => auth()->user()->projects,
'projects' => Project::all(),
]);
}
@ -30,7 +30,7 @@ public function create(Request $request): HtmxResponse
Toast::success('Project created.');
return htmx()->redirect(route('projects'));
return htmx()->redirect(route('settings.projects'));
}
public function update(Request $request, Project $project): HtmxResponse
@ -42,7 +42,7 @@ public function update(Request $request, Project $project): HtmxResponse
Toast::success('Project updated.');
return htmx()->redirect(route('projects'));
return htmx()->redirect(route('settings.projects'));
}
public function delete(Project $project): RedirectResponse
@ -74,6 +74,8 @@ public function switch($projectId): RedirectResponse
/** @var Project $project */
$project = $user->projects()->findOrFail($projectId);
$this->authorize('view', $project);
$user->current_project_id = $project->id;
$user->save();

View File

@ -29,7 +29,7 @@ public function add(Request $request): HtmxResponse
Toast::success('SSH Key added');
return htmx()->redirect(route('ssh-keys'));
return htmx()->redirect(route('settings.ssh-keys'));
}
public function delete(int $id): RedirectResponse
@ -40,6 +40,6 @@ public function delete(int $id): RedirectResponse
Toast::success('SSH Key deleted');
return redirect()->route('ssh-keys');
return redirect()->route('settings.ssh-keys');
}
}

View File

@ -30,7 +30,7 @@ public function connect(Request $request): HtmxResponse
Toast::success('Server provider connected.');
return htmx()->redirect(route('server-providers'));
return htmx()->redirect(route('settings.server-providers'));
}
public function delete(ServerProvider $serverProvider): RedirectResponse

View File

@ -29,7 +29,7 @@ public function connect(Request $request): HtmxResponse
Toast::success('Source control connected.');
return htmx()->redirect(route('source-controls'));
return htmx()->redirect(route('settings.source-controls'));
}
public function delete(SourceControl $sourceControl): RedirectResponse
@ -44,6 +44,6 @@ public function delete(SourceControl $sourceControl): RedirectResponse
Toast::success('Source control deleted.');
return redirect()->route('source-controls');
return redirect()->route('settings.source-controls');
}
}

View File

@ -30,7 +30,7 @@ public function connect(Request $request): HtmxResponse
Toast::success('Storage provider connected.');
return htmx()->redirect(route('storage-providers'));
return htmx()->redirect(route('settings.storage-providers'));
}
public function delete(StorageProvider $storageProvider): RedirectResponse

View File

@ -0,0 +1,78 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Actions\User\CreateUser;
use App\Actions\User\UpdateUser;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
public function index(): View
{
$users = User::query()->paginate(20);
return view('settings.users.index', compact('users'));
}
public function store(Request $request): HtmxResponse
{
$user = app(CreateUser::class)->create($request->input());
return htmx()->redirect(route('settings.users.show', $user));
}
public function show(User $user): View
{
return view('settings.users.show', [
'user' => $user,
]);
}
public function update(User $user, Request $request): RedirectResponse
{
app(UpdateUser::class)->update($user, $request->input());
Toast::success('User updated successfully');
return back();
}
public function updateProjects(User $user, Request $request): HtmxResponse
{
$this->validate($request, [
'projects.*' => [
'required',
Rule::exists('projects', 'id'),
],
]);
$user->projects()->sync($request->projects);
Toast::success('Projects updated successfully');
return htmx()->redirect(route('settings.users.show', $user));
}
public function destroy(User $user): RedirectResponse
{
if ($user->is(request()->user())) {
Toast::error('You cannot delete your own account');
return back();
}
$user->delete();
Toast::success('User deleted successfully');
return redirect()->route('settings.users.index');
}
}