File: //var/www/html/dashboard.orbiwheels.com/app/Http/Controllers/Api/Customer/AuthController.php
<?php
namespace App\Http\Controllers\Api\Customer;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use App\Services\TwilioService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
class AuthController extends Controller
{
public function signup(Request $request)
{
$validator = Validator::make($request->all(), [
'first_name' => 'required|string|max:255',
'last_name' => 'nullable|string|max:255',
'email' => 'required|email|unique:customers,email',
'phone' => 'required|digits:10|unique:customers,phone',
'alternative_phone' => 'nullable|digits:10',
'date_of_birth' => 'required',
'gender' => 'required',
]);
if ($validator->fails()) {
return response()->json(['status' => false, 'errors' => $validator->errors()], 422);
}
// $otp = rand(1000, 9999);
$otp = 1234;
$user = Customer::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'email' => $request->email,
'phone' => $request->phone,
'alternative_no' => $request->alternative_phone,
'date_of_birth' => $request->date_of_birth,
'gender' => $request->gender,
'otp' => $otp,
'otp_expires_at' => now()->addMinutes(5),
]);
// try {
// Log::info("OTP for {$user->phone} is $otp");
// // $twilio->sendSms("+91" . $user->phone, "Your OTP is: $otp");
// } catch (\Exception $e) {
// return response()->json(['status' => false, 'message' => 'Failed to send SMS', 'error' => $e->getMessage()], 500);
// }
return response()->json([
'status' => true,
'message' => 'Signup initiated. OTP sent to phone.'
]);
}
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'phone' => 'required|digits:10|exists:customers,phone',
]);
if ($validator->fails()) {
return response()->json(['status' => false, 'errors' => $validator->errors()], 422);
}
$customer = Customer::where('phone', $request->phone)->first();
// $otp = rand(1000, 9999);
$otp = 1234;
$customer->otp = $otp;
$customer->otp_expires_at = now()->addMinutes(5);
$customer->save();
// try {
// Log::info("OTP for {$customer->phone} is $otp");
// $twilio->sendSms('+91' . $customer->phone, "Your OTP is: $otp");
// return response()->json([
// 'status' => true,
// 'message' => 'OTP sent to your phone number.',
// ]);
// } catch (\Exception $e) {
// return response()->json([
// 'status' => false,
// 'message' => 'Failed to send OTP.',
// 'error' => $e->getMessage(),
// ], 500);
// }
return response()->json([
'status' => true,
'message' => 'OTP sent to your phone number.',
]);
}
public function verifyOtp(Request $request)
{
$validator = Validator::make($request->all(), [
'phone' => 'required|digits:10|exists:customers,phone',
'otp' => 'required|digits:4',
]);
if ($validator->fails()) {
return response()->json(['status' => false, 'errors' => $validator->errors()], 422);
}
$customer = Customer::where('phone', $request->phone)
->where('otp', $request->otp)
->where('otp_expires_at', '>', now())
->first();
if (!$customer) {
return response()->json([
'status' => false,
'message' => 'Invalid or expired OTP.'
], 401);
}
$customer->otp = null;
$customer->otp_expires_at = null;
$customer->save();
$token = $customer->createToken('auth_token')->plainTextToken;
return response()->json([
'status' => true,
'message' => 'OTP verified successfully.',
'token' => $token,
'customer' => $customer
]);
}
public function resendOtp(Request $request)
{
$validator = Validator::make($request->all(), [
'phone' => 'required|digits:10|exists:customers,phone',
]);
if ($validator->fails()) {
return response()->json(['status' => false, 'errors' => $validator->errors()], 422);
}
$otp = 1234;
// $otp = rand(1000, 9999);
$customer = Customer::where('phone', $request->phone)->first();
$customer->update([
'otp' => $otp,
'otp_expires_at' => now()->addMinutes(5),
]);
// try {
// Log::info("Resent OTP to {$customer->phone}: $otp");
// $twilio->sendSms('+91' . $customer->phone, "Your new OTP is: $otp");
// return response()->json([
// 'status' => true,
// 'message' => 'OTP resent successfully to your phone number.',
// ]);
// } catch (\Exception $e) {
// return response()->json([
// 'status' => false,
// 'message' => 'Failed to send OTP.',
// 'error' => $e->getMessage(),
// ], 500);
// }
return response()->json([
'status' => true,
'message' => 'OTP sent to your phone number.',
]);
}
public function logout(Request $request)
{
$customer = $request->user();
if ($customer && $customer->currentAccessToken()) {
$customer->currentAccessToken()->delete();
return response()->json([
'status' => true,
'message' => 'Logged out successfully.'
]);
}
return response()->json([
'status' => false,
'message' => 'customer not authenticated or token missing.'
], 401);
}
public function profile(Request $request)
{
$customer = $request->user();
return response()->json([
'status' => true,
'message' => 'customer profile fetched successfully.',
'customer' => $customer
]);
}
public function updateProfile(Request $request)
{
$customer = $request->user();
$validated = $request->validate([
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'email' => 'required|email|unique:customers,email,' . $customer->id,
'phone' => 'required|string|max:15',
'alternative_phone' => 'nullable|string|max:15',
'date_of_birth' => 'nullable|date',
'gender' => 'nullable|in:male,female,other',
]);
$customer->update($validated);
return response()->json([
'status' => true,
'message' => 'Customer profile updated successfully.',
'customer' => $customer->fresh()
]);
}
public function deleteAccount(Request $request)
{
$customer = $request->user();
if ($customer) {
$customer->tokens()->delete();
$customer->delete();
return response()->json([
'status' => true,
'message' => 'Your account has been deleted successfully.'
]);
}
return response()->json([
'status' => false,
'message' => 'Customer not authenticated.'
], 401);
}
}