diff --git a/Modules/Client/Http/Controllers/Api/AuthController.php b/Modules/Client/Http/Controllers/Api/AuthController.php index 8e36cde6..8a5aa11c 100755 --- a/Modules/Client/Http/Controllers/Api/AuthController.php +++ b/Modules/Client/Http/Controllers/Api/AuthController.php @@ -2,38 +2,83 @@ namespace Modules\Client\Http\Controllers\Api; +use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Models\User; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Hash; +use Symfony\Component\HttpFoundation\Response; class AuthController extends Controller { - public function login(Request $request) + public function requestOtp(Request $request) { $request->validate([ - 'email' => 'required|email', - 'password' => 'required' + // 'phone' => 'required' + 'phone_or_email' => 'required' + ]); + + if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) { + $user = User::updateOrCreate([ + 'email' => $request->phone_or_email + ], [ + 'email' => $request->phone_or_email, + 'otp' => rand(1000, 9999), + 'otp_created_at' => now() + ]); + } else { + $user = User::updateOrCreate([ + 'phone' => $request->phone_or_email + ], [ + 'phone' => $request->phone_or_email, + 'otp' => rand(1000, 9999), + 'otp_created_at' => now() + ]); + } + + if (!$user) { + $message = filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ? "User dengan alamat email " . $request->phone_or_email . " tidak ditemukan" : "User dengan nomor telepon " . $request->phone_or_email . " tidak ditemukan"; + + return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message); + } + + // TODO Send the OTP + if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) { + // Send Email + } else { + // Send Whatsapp + } + + return Helper::responseJson(message: 'OTP Terkirim'); + } + + public function validateOtp(Request $request) + { + $request->validate([ + 'phone_or_email' => 'required', + 'otp' => 'required' ]); $user = User::query() - ->where('email', $request->email) - ->first(); + ->when(filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL), function (Builder $query) use ($request) { + $query->getQuery()->where('email', $request->phone_or_email); + }, function (Builder $query) use ($request) { + $query->getQuery()->where('phone', $request->phone_or_email); + }) + ->first(); - if (!$user) { - return response(['message' => 'User Tidak Ditemukan'], 404); + if ($user->otp == $request->otp) { + return Helper::responseJson( + data: [ + 'token' => $user->createToken('app')->plainTextToken, + 'user' => $user, + ], + message: 'Selamat Datang' + ); } - if (!Hash::check($request->password, $user->password)) { - return response(['message' => 'Password Salah'], 403); - } - - return response([ - 'message' => 'Selamat Datang', - 'user' => $user, - 'token' => $user->createToken('app')->plainTextToken - ]); + return Helper::responseJson(message: 'OTP yang anda masukan salah!'); } public function logout(Request $request) diff --git a/Modules/Client/Routes/api.php b/Modules/Client/Routes/api.php index 09b10e41..b9dc6f98 100755 --- a/Modules/Client/Routes/api.php +++ b/Modules/Client/Routes/api.php @@ -1,6 +1,5 @@ group(function () { - - Route::post('login', [AuthController::class, 'login'])->name('login'); - Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password'); - Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email'); + + Route::controller(AuthController::class)->group(function () { + Route::post('otp-request', 'requestOtp'); + Route::post('otp-validation', 'validateOtp'); + }); Route::middleware('auth:sanctum')->group(function () { - + Route::post('logout', [AuthController::class, 'logout'])->name('logout'); Route::get('/user', [UserController::class, 'index']); Route::get('dashboard', [DashboardController::class, 'index']); Route::get('members', [MemberController::class, 'index']); - }); - });