Compare commits

...

1 Commits

Author SHA1 Message Date
arifal
e8da7193ef fix crud users 2025-02-19 11:23:15 +07:00
6 changed files with 63 additions and 17 deletions

View File

@@ -38,20 +38,20 @@ class UsersController extends Controller
return response()->json(['message' => 'logged out successfully']); return response()->json(['message' => 'logged out successfully']);
} }
public function store(UsersRequest $request){ public function store(UsersRequest $request){
$validate_data = $request->validated(); $validate_data = $request->validated();
DB::beginTransaction(); DB::beginTransaction();
try{ try{
$user = User::create([ $user = User::create([
'name' => $validate_data->name, 'name' => $validate_data['name'],
'email' => $validate_data->email, 'email' => $validate_data['email'],
'password' => Hash::make($validate_data->password), 'password' => Hash::make($validate_data['password']),
'firstname' => $validate_data->firstname, 'firstname' => $validate_data['firstname'],
'lastname' => $validate_data->lastname, 'lastname' => $validate_data['lastname'],
'position' => $validate_data->position 'position' => $validate_data['position'],
]); ]);
$user->roles()->attach($request->role_id); $user->roles()->attach((int) $validate_data['role_id']);
DB::commit(); DB::commit();
return response()->json(['message' => 'Successfully created'],201); return response()->json(['message' => 'Successfully created'],201);
@@ -60,4 +60,27 @@ class UsersController extends Controller
return response()->json(['message' => $e->getMessage()],500); return response()->json(['message' => $e->getMessage()],500);
}; };
} }
public function update(UsersRequest $request, $id){
try{
$validate_data = $request->validated();
$user = User::findOrFail($id);
DB::beginTransaction();
$user->update([
'name' => $validate_data['name'],
'email' => $validate_data['email'],
'firstname' => $validate_data['firstname'],
'lastname' => $validate_data['lastname'],
'position' => $validate_data['position']
]);
$user->roles()->sync($request->role_id);
DB::commit();
return response()->json(['message' => 'Successfully updated'], 200);
}catch(\Exception $e){
DB::rollBack();
return response()->json(['message' => $e->getMessage()],500);
}
}
} }

View File

@@ -22,7 +22,7 @@ class UsersRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$userId = $this->route('user'); // Get user ID from route (used in update) $userId = $this->route('users'); // Get user ID from route (used in update)
return [ return [
'name' => ['required', 'string', 'max:255'], 'name' => ['required', 'string', 'max:255'],
@@ -31,7 +31,7 @@ class UsersRequest extends FormRequest
'string', 'string',
'email', 'email',
'max:255', 'max:255',
Rule::unique('users')->ignore($userId), // Ignore the user's own email when updating Rule::unique('users')->ignore($userId)
], ],
'password' => [$this->isMethod('post') ? 'required' : 'nullable', 'confirmed', 'max:255'], 'password' => [$this->isMethod('post') ? 'required' : 'nullable', 'confirmed', 'max:255'],
'firstname' => ['required', 'string', 'max:255'], 'firstname' => ['required', 'string', 'max:255'],

View File

@@ -19,15 +19,24 @@ document.addEventListener("DOMContentLoaded", function (e) {
submitButton.disabled = true; submitButton.disabled = true;
spinner.classList.remove("d-none"); spinner.classList.remove("d-none");
let jsonData = {};
formData.forEach((value, key) => {
jsonData[key] = value;
});
console.log(jsonData);
try { try {
let response = await fetch(form.action, { let response = await fetch(form.action, {
method: "POST", method: "POST",
headers: { headers: {
"X-CSRF-TOKEN": document "Content-Type": "application/json",
.querySelector('meta[name="csrf-token"]') Accept: "application/json",
.getAttribute("content"), Authorization: `Bearer ${document
.querySelector('meta[name="api-token"]')
.getAttribute("content")}`,
}, },
body: formData, body: JSON.stringify(jsonData),
}); });
if (response.ok) { if (response.ok) {

View File

@@ -8,8 +8,13 @@
<div class="row d-flex justify-content-center"> <div class="row d-flex justify-content-center">
<div class="col-lg-6"> <div class="col-lg-6">
<div class="card"> <div class="card">
<div class="card-header">
<div class="d-flex justify-content-end">
<a href="{{ route('users.index') }}" class="btn btn-sm btn-secondary me-2">Back</a>
</div>
</div>
<div class="card-body"> <div class="card-body">
<form id="formCreateUsers" action="{{route('users.store')}}" method="POST"> <form id="formCreateUsers" action="{{route('api.users.store')}}" method="POST">
@csrf @csrf
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="name">Name</label> <label class="form-label" for="name">Name</label>

View File

@@ -8,6 +8,11 @@
<div class="row d-flex justify-content-center"> <div class="row d-flex justify-content-center">
<div class="col-lg-6"> <div class="col-lg-6">
<div class="card"> <div class="card">
<div class="card-header">
<div class="d-flex justify-content-end">
<a href="{{ route('users.index') }}" class="btn btn-sm btn-secondary me-2">Back</a>
</div>
</div>
<div class="card-body"> <div class="card-body">
<form id="formUpdateUsers" action="{{ route('users.update', $user->id)}}" method="post"> <form id="formUpdateUsers" action="{{ route('users.update', $user->id)}}" method="post">
@csrf @csrf

View File

@@ -21,8 +21,12 @@ use Illuminate\Support\Facades\Route;
Route::post('/login', [UsersController::class, 'login'])->name('api.user.login'); Route::post('/login', [UsersController::class, 'login'])->name('api.user.login');
Route::group(['middleware' => 'auth:sanctum'], function (){ Route::group(['middleware' => 'auth:sanctum'], function (){
// users // users
Route::get('/users', [UsersController::class, 'index'])->name('users'); Route::controller(UsersController::class)->group(function(){
Route::post('/logout', [UsersController::class, 'logout'])->name('api.user.logout'); Route::get('/users', 'index')->name('api.users');
Route::post('/users', 'store')->name('api.users.store');
Route::put('/users/{id}', 'update')->name('api.users.update');
Route::post('/logout','logout')->name('api.users.logout');
});
// global settings // global settings
Route::apiResource('global-settings', GlobalSettingsController::class); Route::apiResource('global-settings', GlobalSettingsController::class);