Skip to content

Commit 5455c0f

Browse files
committed
Added: Update profile, change password
1 parent a546523 commit 5455c0f

File tree

6 files changed

+514
-6
lines changed

6 files changed

+514
-6
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use Exception;
6+
use App\Models\User;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Http\JsonResponse;
9+
use Tymon\JWTAuth\Facades\JWTAuth;
10+
use App\Http\Controllers\Controller;
11+
use Illuminate\Support\Facades\Hash;
12+
13+
class PersonalController extends Controller
14+
{
15+
public function index()
16+
{
17+
try
18+
{
19+
$user_id = JWTAuth::parseToken()->getPayload()->get('sub');
20+
$data = User::findOrFail($user_id);
21+
22+
return response()->json([
23+
'data' => $data,
24+
'success' => true,
25+
], JsonResponse::HTTP_OK);
26+
} catch (Exception $e)
27+
{
28+
return response()->json([
29+
'data' => [],
30+
'success' => false,
31+
'message' => $e->getMessage()
32+
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
33+
}
34+
35+
}
36+
37+
public function updateProfile(Request $request)
38+
{
39+
try
40+
{
41+
$user_id = JWTAuth::parseToken()->getPayload()->get('sub');
42+
$data = User::findOrFail($user_id);
43+
44+
$data->update([
45+
'name' => $request->input('name'),
46+
'email' => $request->input('email'),
47+
]);
48+
49+
return response()->json([
50+
'data' => $data,
51+
'success' => true,
52+
'message' => 'Data updated successfully'
53+
], JsonResponse::HTTP_OK);
54+
} catch (Exception $e)
55+
{
56+
return response()->json([
57+
'data' => [],
58+
'success' => false,
59+
'message' => $e->getMessage()
60+
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
61+
}
62+
63+
}
64+
65+
public function updatePassword(Request $request)
66+
{
67+
try
68+
{
69+
$user_id = JWTAuth::parseToken()->getPayload()->get('sub');
70+
$user = User::findOrFail($user_id);
71+
72+
$this->validate($request, [
73+
'current_password' => 'required',
74+
'password' => 'required|string|min:6|confirmed'
75+
]);
76+
77+
if (!Hash::check($request->current_password, $user->password)) {
78+
return response()->json([
79+
'data' => [],
80+
'success' => false,
81+
'message' => 'Current password is incorrect'
82+
], JsonResponse::HTTP_UNAUTHORIZED);
83+
}
84+
85+
if ($request->password !== $request->password_confirmation) {
86+
return response()->json([
87+
'data' => [],
88+
'success' => false,
89+
'message' => "Password and confirmation password do not match"
90+
], JsonResponse::HTTP_UNPROCESSABLE_ENTITY);
91+
}
92+
93+
$user->password = Hash::make($request->password);
94+
$user->save();
95+
96+
return response()->json([
97+
'data' => $user,
98+
'success' => true,
99+
'message' => 'Password updated successfully'
100+
], JsonResponse::HTTP_OK);
101+
} catch (Exception $e)
102+
{
103+
return response()->json([
104+
'data' => [],
105+
'success' => false,
106+
'message' => $e->getMessage()
107+
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
108+
}
109+
}
110+
}

backend/routes/api.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
use App\Http\Controllers\GalleryController;
4+
use App\Http\Controllers\PersonalController;
45
use Illuminate\Http\Request;
56
use Illuminate\Support\Facades\Route;
67
use App\Http\Controllers\ProductController;
@@ -25,6 +26,17 @@
2526
return $user;
2627
});
2728

29+
Route::group(['middleware' => ['auth:api']], function () {
30+
Route::get('/user', function (Request $request) {
31+
$user = $request->user(); $role = $user->hasRole('admin') ? 'admin' : 'user';
32+
$user->setAttribute('role', $role);
33+
return $user;
34+
});
35+
Route::get('/profile', [PersonalController::class, 'index']);
36+
Route::put('/profile', [PersonalController::class, 'updateProfile']);
37+
Route::put('/update-password', [PersonalController::class, 'updatePassword']);
38+
});
39+
2840
Route::group(['middleware' => ['auth:api', 'role:admin']], function () {
2941
Route::resource('/products', ProductController::class);
3042
Route::resource('/gallery', GalleryController::class);

frontend/src/components/Footer.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default function Footer() {
88
By
99
<a href="https://github.com/fhmiibrhimdev"> Fahmi Ibrahim</a>
1010
</div>
11-
<div className="footer-right">0.1.5</div>
11+
<div className="footer-right">0.1.6</div>
1212
</footer>
1313
);
1414
}

frontend/src/components/Router.jsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import MainLayout from "../pages/Layout/MainLayout";
1111
import Error403 from "../pages/Error/403";
1212
import Error404 from "../pages/Error/404";
1313
import Gallery from "../pages/Gallery/Gallery";
14+
import Profile from "../pages/Profile/Profile";
1415

1516
export default function Router() {
1617
return (
@@ -79,6 +80,15 @@ export default function Router() {
7980
</MainLayout>
8081
}
8182
/>
83+
<Route
84+
exact
85+
path="/profile"
86+
element={
87+
<MainLayout>
88+
<Profile />
89+
</MainLayout>
90+
}
91+
/>
8292
<Route path="*" element={<Error404 />} />
8393
</Routes>
8494
);

0 commit comments

Comments
 (0)