Version 0.7.0 #1
17
app/Dto/Request/Private/Profile/Update.php
Normal file
17
app/Dto/Request/Private/Profile/Update.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Dto\Request\Private\Profile;
|
||||
|
||||
use App\Dto\Request\Dto;
|
||||
|
||||
final readonly class Update extends Dto
|
||||
{
|
||||
public function __construct(
|
||||
private string $name
|
||||
) { }
|
||||
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
}
|
13
app/Http/Controllers/Private/Controller.php
Normal file
13
app/Http/Controllers/Private/Controller.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Private;
|
||||
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
}
|
@ -2,22 +2,41 @@
|
||||
|
||||
namespace App\Http\Controllers\Private;
|
||||
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Requests\Private\Profile\UpdateRequest;
|
||||
use App\Services\Private\ProfileService;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
final class ProfileController extends Controller
|
||||
{
|
||||
public function profile(): View
|
||||
public function __construct(
|
||||
private readonly ProfileService $profileService
|
||||
) { }
|
||||
|
||||
public function profile(Request $request): View
|
||||
{
|
||||
return view('private/profile/profile', [
|
||||
'user' => Auth::user()
|
||||
'user' => $request->user()
|
||||
]);
|
||||
}
|
||||
|
||||
public function settings(): View
|
||||
public function settings(Request $request): View
|
||||
{
|
||||
return view('private/profile/settings', [
|
||||
'user' => Auth::user()
|
||||
'user' => $request->user()
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(UpdateRequest $request): RedirectResponse
|
||||
{
|
||||
$data = $request->getDto();
|
||||
$user = $request->user();
|
||||
|
||||
$result = $this->profileService->update($data, $user);
|
||||
if ($result->isError()) {
|
||||
return redirect()->back()->withInput()->withErrors($result->getMessage());
|
||||
}
|
||||
return redirect()->route('profile.edit')->withSuccess($result->getMessage());
|
||||
}
|
||||
}
|
||||
|
25
app/Http/Requests/Private/Profile/UpdateRequest.php
Normal file
25
app/Http/Requests/Private/Profile/UpdateRequest.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Requests\Private\Profile;
|
||||
|
||||
use App\Contracts\FormRequestDto;
|
||||
use App\Dto\Request\Private\Profile\Update;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
final class UpdateRequest extends FormRequest implements FormRequestDto
|
||||
{
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'name' => ['required', 'max:255'],
|
||||
];
|
||||
}
|
||||
|
||||
public function getDto(): Update
|
||||
{
|
||||
return new Update(name: $this->input('name'));
|
||||
}
|
||||
}
|
31
app/Services/Private/ProfileService.php
Normal file
31
app/Services/Private/ProfileService.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Services\Private;
|
||||
|
||||
use App\Dto\Request\Private\Profile\Update;
|
||||
use App\Models\User;
|
||||
use App\ServiceResults\ServiceResultError;
|
||||
use App\ServiceResults\ServiceResultSuccess;
|
||||
use App\Services\Service;
|
||||
use App\Services\User\UserCommandHandler;
|
||||
|
||||
final class ProfileService extends Service
|
||||
{
|
||||
public function __construct(
|
||||
private readonly UserCommandHandler $userCommandHandler
|
||||
) { }
|
||||
|
||||
public function update(Update $update, User $user): ServiceResultError | ServiceResultSuccess
|
||||
{
|
||||
try {
|
||||
$data = [
|
||||
'name' => $update->getName()
|
||||
];
|
||||
$this->userCommandHandler->handleUpdate($user, $data);
|
||||
} catch (\Throwable $e) {
|
||||
report($e->getMessage());
|
||||
return $this->errService($e->getMessage());
|
||||
}
|
||||
return $this->ok(__('Profile saved successfully'));
|
||||
}
|
||||
}
|
@ -37,5 +37,12 @@
|
||||
"Your Email": "Your Email",
|
||||
"Your Password": "Your Password",
|
||||
"Remember me": "Remember me",
|
||||
"Sign in": "Sign in"
|
||||
"Sign in": "Sign in",
|
||||
"Toggle navigation": "Toggle navigation",
|
||||
"Hello": "Hello",
|
||||
"My Profile": "My Profile",
|
||||
"Settings": "Settings",
|
||||
"Dashboard": "Dashboard",
|
||||
"Save": "Save",
|
||||
"Profile saved successfully": "Profile saved successfully"
|
||||
}
|
||||
|
@ -37,5 +37,12 @@
|
||||
"Your Email": "Ваш Email",
|
||||
"Your Password": "Ваш пароль",
|
||||
"Remember me": "Запомнить",
|
||||
"Sign in": "Войти"
|
||||
"Sign in": "Войти",
|
||||
"Toggle navigation": "Переключение навигации",
|
||||
"Hello": "Здравствуйте",
|
||||
"My Profile": "Мой профиль",
|
||||
"Settings": "Настройки",
|
||||
"Dashboard": "Dashboard",
|
||||
"Save": "Сохранить",
|
||||
"Profile saved successfully": "Профиль успешно сохранен"
|
||||
}
|
||||
|
34
resources/views/private/profile/profile.blade.php
Normal file
34
resources/views/private/profile/profile.blade.php
Normal file
@ -0,0 +1,34 @@
|
||||
@section('meta_title', __('My Profile'))
|
||||
@section('h1', __('My Profile'))
|
||||
<x-private.layout>
|
||||
<div class="row">
|
||||
<div class="col-12 mb-4">
|
||||
<div class="card border-0 shadow components-section">
|
||||
<div class="card-body">
|
||||
<form method="post" action="{{ route('profile.update') }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<x-private.forms.input :title="__('validation.attributes.email')" name="email" type="email" :value="$user->email" disabled required />
|
||||
<x-private.forms.input :title="__('validation.attributes.name')" name="name" type="text" :value="$user->name" required autofocus />
|
||||
<button class="btn btn-primary" type="submit">{{ __('Save') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 mb-4">
|
||||
<div class="card border-0 shadow components-section">
|
||||
<div class="card-body">
|
||||
<form method="post" {{ route('profile.update-password') }}>
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<x-private.forms.input :title="__('validation.attributes.password')" name="password" type="password" required />
|
||||
<x-private.forms.input :title="__('validation.attributes.password_confirmation')" name="password_confirmation" type="password" required />
|
||||
<button class="btn btn-primary" type="submit">{{ __('Save') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-private.layout>
|
@ -23,6 +23,8 @@ Route::middleware(['auth', 'verified'])->group(function () {
|
||||
Route::prefix('profile')->as('profile.')
|
||||
->group(function () {
|
||||
Route::get('/', [\App\Http\Controllers\Private\ProfileController::class, 'profile'])->name('edit');
|
||||
Route::put('/', [\App\Http\Controllers\Private\ProfileController::class, 'update'])->name('update');
|
||||
Route::put('password', [\App\Http\Controllers\Private\ProfileController::class, 'updatePassword'])->name('update-password');
|
||||
Route::get('settings', [\App\Http\Controllers\Private\ProfileController::class, 'settings'])->name('settings');
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user