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;
|
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;
|
use Illuminate\View\View;
|
||||||
|
|
||||||
final class ProfileController extends Controller
|
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', [
|
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', [
|
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 Email": "Your Email",
|
||||||
"Your Password": "Your Password",
|
"Your Password": "Your Password",
|
||||||
"Remember me": "Remember me",
|
"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 Email": "Ваш Email",
|
||||||
"Your Password": "Ваш пароль",
|
"Your Password": "Ваш пароль",
|
||||||
"Remember me": "Запомнить",
|
"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.')
|
Route::prefix('profile')->as('profile.')
|
||||||
->group(function () {
|
->group(function () {
|
||||||
Route::get('/', [\App\Http\Controllers\Private\ProfileController::class, 'profile'])->name('edit');
|
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');
|
Route::get('settings', [\App\Http\Controllers\Private\ProfileController::class, 'settings'])->name('settings');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user