diff --git a/app/Http/Controllers/apis/AuthApisController.php b/app/Http/Controllers/apis/AuthApisController.php index b9a36a0..c05d57d 100644 --- a/app/Http/Controllers/apis/AuthApisController.php +++ b/app/Http/Controllers/apis/AuthApisController.php @@ -48,7 +48,7 @@ public function login(Request $request) } else { return response()->json([ 'status' => 404, - 'data' => 'user not found' + 'data' => 'user not found or user not authed' ], 400); } } @@ -56,6 +56,7 @@ public function login(Request $request) public function register(Request $request) { $data = $request->only(['username', 'name', 'email', 'password']); + $data['email_verified_at'] = date('Y-m-d H:i:s'); $rules = [ 'username' => 'required', diff --git a/app/Http/Controllers/apis/DeviceApisController.php b/app/Http/Controllers/apis/DeviceApisController.php index a4454d4..070f588 100644 --- a/app/Http/Controllers/apis/DeviceApisController.php +++ b/app/Http/Controllers/apis/DeviceApisController.php @@ -3,22 +3,30 @@ namespace App\Http\Controllers\apis; use App\Http\Controllers\Controller; -use App\Http\Resources\DeviceResource; use App\Models\Device; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Validator; class DeviceApisController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - $device = Device::where('user_id', Auth::user()->id)->get(); - // $device = Device::all(); - return new DeviceResource(true, 'List Data Posts', $device); + $devices = []; + + foreach (Device::where('user_id', $request->user()->id)->get() as $device) { + $devices[] = $device; + $device['user_name'] = $device->User->name; + $device['created_at_diff'] = $device->created_at->diffForHumans(); + } + + return response()->json([ + 'status' => 200, + 'total' => Device::where('user_id', $request->user()->id)->count(), + 'data' => $devices + ], 200); } /** @@ -26,78 +34,93 @@ public function index() */ public function store(Request $request) { - $validator = Validator::make($request->all(), [ - // 'user_id' => 'required', - 'device_name' => 'required|min:3', - 'device_year' => 'required|numeric|digits:4|min:1990|max:' . date('Y'), - 'drive_link' => 'nullable|url', - 'device_image' => 'nullable|image|max:1024|mimes:jpg,png,jpeg', - ]); - if ($validator->fails()) { - return response()->json($validator->errors(), 422); - } - if ($request->hasFile('device_image')) { - $image = $request->file('device_image'); - $image->storeAs('public/posts', $image->hashName()); - } + $request['user_id'] = $request->user()->id; - $device = Device::create([ - // 'user_id' => Auth::user()->id, - 'user_id' => $request->user()->id, - 'device_name' => $request->device_name, - 'device_year' => $request->device_year, - 'drive_link' => $request->drive_link, - // 'image_link' => $image->hashName(), + $validated = $request->validate([ + 'user_id' => 'required', + 'device_name' => 'required', + 'device_year' => 'required', + 'drive_link' => 'nullable', ]); - return new DeviceResource(true, 'Data Perangkat Berhasil Ditambahkan', $device); + + try { + // Masukkan data ke dalam database + $device = Device::create($validated); + + // Kembalikan respons JSON + return response()->json([ + 'status' => 200, + 'data' => $device + ], 200); + } catch (\Exception $e) { + // Log error + // Log::error('Error creating device: ' . $e->getMessage()); + + // Kembalikan respons error + return response()->json([ + 'status' => 500, + 'error' => 'Internal Server Error' + ], 500); + } } /** * Display the specified resource. */ - public function show($id) + public function show(Device $device) { - // $perangkat = Device::where('user_id', Auth::user()->id)->where('id', $id)->first(); - $device = - Device::where('user_id', Auth::user()->id)->where('id', $id)->first(); - if (!$device) { - return response()->json(['success' => false, 'message' => 'Data Perangkat Tidak Ditemukan'], 404); - } - return new DeviceResource(true, 'Data Perangkat Berhasil Ditampilkan', $device); + return response()->json([ + 'data' => 'data', + 'status' => $device + ], 200); } + /** + * Show the form for editing the sp /** * Update the specified resource in storage. */ - public function update(Request $request, $id) + public function update(Request $request, Device $device) { - $device = Device::find($id); - if (!$device) { - return response()->json(['success' => false, 'message' => 'Data Perangkat Tidak Ditemukan'], 404); - } - $validator = Validator::make($request->all(), [ - 'device_name' => 'sometimes|required|min:3', - 'device_year' => 'sometimes|required|numeric|digits:4|min:1990|max:' . date('Y'), - 'drive_link' => 'nullable|url', - 'device_image' => 'nullable|image|max:1024|mimes:jpg,png,jpeg', + $request['user_id'] = $request->user()->id; + + $validated = $request->validate([ + 'user_id' => 'required', + 'device_name' => 'required', + 'device_year' => 'required', + 'drive_link' => 'nullable', ]); - if ($validator->fails()) { - return response()->json($validator->errors(), 422); + + try { + // Masukkan data ke dalam database + $device = Device::find($device->id)->update($validated); + + // Kembalikan respons JSON + return response()->json([ + 'status' => 200, + 'data' => $device + ], 200); + } catch (\Exception $e) { + // Log error + // Log::error('Error creating device: ' . $e->getMessage()); + + // Kembalikan respons error + return response()->json([ + 'status' => 500, + 'error' => 'Internal Server Error' + ], 500); } - $device->update($request->only('device_name', 'device_year', 'drive_link')); - return new DeviceResource(true, 'Data Perangkat Berhasil Diupdate', $device); } /** * Remove the specified resource from storage. */ - public function destroy($id) + public function destroy(Device $device) { - $device = Device::find($id); - if (!$device) { - return response()->json(['success' => false, 'message' => 'Data Perangkat Tidak Ditemukan'], 404); - } - $device->delete(); - return response()->json(['success' => true, 'message' => 'Data Perangkat Berhasil Dihapus']); + Device::destroy($device->id); + return response()->json([ + 'status' => 200, + 'data' => 'sukses', + ], 200); } } diff --git a/app/Http/Controllers/apis/ProfileApisController.php b/app/Http/Controllers/apis/ProfileApisController.php index 42e4bb7..660e621 100644 --- a/app/Http/Controllers/apis/ProfileApisController.php +++ b/app/Http/Controllers/apis/ProfileApisController.php @@ -4,6 +4,14 @@ use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Validator; +use App\Models\{ + Device, + Ticket, + User, + Proces +}; class ProfileApisController extends Controller { @@ -23,23 +31,118 @@ public function index(Request $request) /** * Update the specified resource in storage. */ - public function store(Request $request) + public function update(Request $request) { - $user_id = $request->user()->id; + $user = $request->user(); + $data = []; - $request->only(['username', 'name', 'email', 'password']); - // + $request->only(['username', 'name', 'email', 'b_password', 'n_password', 'c_password']); - return response()->json([ - 'data' => $request + if (isset($request->b_password) && isset($request->n_password) && isset($request->c_password)) { + $validator = Validator::make($request->all(), [ + 'username' => 'nullable', + 'name' => 'nullable', + 'email' => 'nullable', + 'b_password' => 'required', + 'n_password' => 'required|min:6', + 'c_password' => 'required|same:n_password', + ]); + + if (!Hash::check($request->b_password, $user->password)) { + return response()->json(['error' => 'Old password is incorrect'], 400); + } + + // $user->password = Hash::make($request->n_password); + $data['password'] = Hash::make($request->n_password); + } else { + $validator = Validator::make($request->all(), [ + 'username' => 'nullable', + 'name' => 'nullable', + 'email' => 'nullable', + ]); + } + + $data['username'] = $request->username; + $data['name'] = $request->name; + $data['email'] = $request->email; + + $status = User::find($user->id)->update($data); + + if ($status) { + return response()->json([ + 'status' => 200, + 'data' => 'data user berhasil diperbahrui!' + ], 200); + } else { + return response()->json([ + 'status' => 400, + 'data' => 'data user gagal diperbahrui!' + ]); + } + } + + public function update_password(Request $request) + { + + // Validasi input + $validator = Validator::make($request->all(), [ + 'b_password' => 'required', + 'n_password' => 'required|min:6', + 'c_password' => 'required|same:n_password', ]); + + if ($validator->fails()) { + return response()->json(['errors' => $validator->errors()], 400); + } + + // Dapatkan user saat ini + $user = $request->user(); + + // Periksa apakah password lama cocok + if (!Hash::check($request->b_password, $user->password)) { + return response()->json(['error' => 'Old password is incorrect'], 400); + } + + // Update password + $user->password = Hash::make($request->n_password); + $user->save(); + + return response()->json(['message' => 'Password updated successfully'], 200); } /** * Remove the specified resource from storage. */ - public function destroy(string $id) + public function destroy(Request $request) { - // + $devices = Device::where('user_id', $request->user()->id); + $ticket = Ticket::whereIn('device_id', $devices->pluck('id')); + $proces = Proces::whereIn('ticket_id', $ticket->pluck('id')); + + try { + if ($ticket->count() < 1) { + // menghapus semua data device + if ($devices->count() >= 0) { + $delete_device = $devices->get()->each->delete(); + if ($delete_device) { + $request->user()->delete(); + return response()->json([ + 'status' => 200, + 'data' => 'user berhasil dihapus!', + ], 200); + } + } + } else { + return response()->json([ + 'status' => 405, + 'data' => 'user gagal dihapus!' + ], 405); + } + } catch (\Exception $e) { + return response()->json([ + 'status' => 404, + 'data' => $e + ], 404); + } } } diff --git a/routes/api.php b/routes/api.php index 25c1b22..7beb0c4 100644 --- a/routes/api.php +++ b/routes/api.php @@ -6,10 +6,11 @@ AuthApisController, DeviceApisController, - DevicesApisController, + // DevicesApisController, ProcessApisController, TicketApisController, - ProfileApisController + ProfileApisController, + // DeviceApisController }; use App\Http\Controllers\apis\DevicesApiController; use App\Http\Controllers\DevicesApiController as ControllersDevicesApiController; @@ -33,8 +34,12 @@ Route::post('/login', [AuthApisController::class, 'login']); Route::post('/register', [AuthApisController::class, 'register']); -// Route::resource('/profile', [ProfileApisController::class])->middleware('auth:sanctum'); -// Route::resource('/profile', [AuthApisController::class])->middleware('auth:sanctum'); +Route::middleware('auth:sanctum')->group(function () { + Route::resource('/profile', ProfileApisController::class); + Route::resource('/ticket', TicketApisController::class); + Route::resource('/device', DeviceApisController::class); + Route::put('/passwordupdate', [ProfileApisController::class, 'update_password']); +}); Route::get('/antrean', [TicketApisController::class, 'index'])->middleware('auth:sanctum'); Route::post('/antrean', [TicketApisController::class, 'store'])->middleware('auth:sanctum'); @@ -52,11 +57,5 @@ Route::apiResource('/proces', ProcessApisController::class)->only([ 'index', 'store', 'show', 'update', 'destroy' ])->middleware('auth:sanctum'); -// Route::apiResource('/devices', DevicesApiController::class)->only([ -// // 'index', 'show', 'update', 'destroy' -// ]); -Route::get('/device', [DeviceApisController::class, 'index'])->middleware('auth:sanctum'); -Route::post('/device', [DeviceApisController::class, 'store'])->middleware('auth:sanctum'); -Route::put('/device/{id}', [DeviceApisController::class, 'show'])->middleware('auth:sanctum'); -Route::post('/device/{id}', [DeviceApisController::class, 'update'])->middleware('auth:sanctum'); -Route::delete('/device/{id}', [DeviceApisController::class, 'destroy'])->middleware('auth:sanctum'); + +// Route::resource('/device/{id}', DeviceApisController::class);