validate([ 'phoneOrEmail' => 'required' ]); $user = User::query() ->when(filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL), function (Builder $query) use ($request) { $query->getQuery()->where('email', $request->phoneOrEmail); }, function (Builder $query) use ($request) { $query->getQuery()->where('phone', $request->phoneOrEmail); }) ->first(); if (!$user) { $message = filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL) ? "User dengan alamat email " . $request->phoneOrEmail . " tidak ditemukan" : "User dengan nomor telepon " . $request->phoneOrEmail . " tidak ditemukan"; return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message); } $token = mt_rand(100000, 999999); // Menghasilkan angka acak antara 100000 dan 999999 if($request->phoneOrEmail == 'manager+one@gmail.com' || $request->phoneOrEmail == 'manager+two@gmail.com') { $token = 4444; } if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) { User::query()->find($user->id)->update([ 'email' => $request->phoneOrEmail, 'otp' => $token, 'otp_created_at' => now() ]); } else { User::query()->find($user->id)->update([ 'phone' => $request->phoneOrEmail, 'otp' => $token, 'otp_created_at' => now() ]); } // TODO Send the OTP if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) { // Send Email //send to alarm if($request->phoneOrEmail != 'manager+one@gmail.com' && $request->phoneOrEmail != 'manager+two@gmail.com') { $nameTo = 'User'; $dataEmail = [ 'email' => $request->phoneOrEmail, 'name' => $nameTo, 'subject' => 'OTP Login Client Portal Tanggal '. date('Y-m-d H:i:s'), 'body' => View::make('email/forgot_password', ['token' => $token])->render(), ]; Helper::sendEmail($dataEmail); } } else { // Send Whatsapp } return Helper::responseJson(message: 'OTP Terkirim'); } public function validateOtp(Request $request) { $request->validate([ 'phoneOrEmail' => 'required', 'otp' => 'required' ]); $user = User::query() ->when(filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL), function (Builder $query) use ($request) { $query->getQuery()->where('email', $request->phoneOrEmail); }, function (Builder $query) use ($request) { $query->getQuery()->where('phone', $request->phoneOrEmail); }) ->first(); if ($user->otp == $request->otp) { return Helper::responseJson( data: [ 'token' => $user->createToken('app')->plainTextToken, 'user' => $user, ], message: 'Selamat Datang' ); } return Helper::responseJson(status: 'error', message: 'OTP yang anda masukan salah!'); } public function logout(Request $request) { $request->user()->currentAccessToken()->delete(); return Helper::responseJson(message: 'Berhasil Logout.'); } }