attributes->get('_jwt_user_id'); $userType = $request->attributes->get('_jwt_user_type'); $page = (int) $request->input('page', 1); $limit = min((int) $request->input('limit', 20), 50); if ($userType === 'driver') { $notifications = DB::connection('primary')->table('notificationCaptain') ->where('driverID', $userId) ->orderBy('dateCreated', 'desc') ->skip(($page - 1) * $limit)->take($limit) ->get(); } else { $notifications = DB::connection('primary')->table('notifications') ->where('passenger_id', $userId) ->orderBy('created_at', 'desc') ->skip(($page - 1) * $limit)->take($limit) ->get(); } return response()->json(['status' => 'success', 'data' => $notifications, 'message' => $notifications]); } /** PUT /v2/notifications/{id}/read */ public function markRead(Request $request, int $id): JsonResponse { $userType = $request->attributes->get('_jwt_user_type'); $table = $userType === 'driver' ? 'notificationCaptain' : 'notifications'; DB::connection('primary')->table($table) ->where('id', $id) ->update(['isShown' => 'true']); return response()->json(['status' => 'success']); } /** POST /v2/notifications/update (For V1 Compatibility) */ public function updateNotification(Request $request): JsonResponse { $id = $request->input('id'); if (!$id) { return response()->json(['status' => 'failure', 'message' => 'Missing notification ID']); } $isShown = $request->input('isShown', 'true'); $userType = $request->attributes->get('_jwt_user_type'); $table = $userType === 'driver' ? 'notificationCaptain' : 'notifications'; DB::connection('primary')->table($table) ->where('id', $id) ->update(['isShown' => $isShown]); return response()->json(['status' => 'success']); } /** POST /v2/notifications/token */ public function updateToken(Request $request): JsonResponse { $request->validate([ 'token' => 'required|string', 'fingerPrint' => 'required|string', ]); $userId = $request->attributes->get('_jwt_user_id') ?? $request->input('passengerID'); $userType = $request->attributes->get('_jwt_user_type') ?? 'passenger'; if (!$userId) { return response()->json(['status' => 'failure', 'message' => 'User ID missing'], 400); } if ($userType === 'driver') { DB::connection('primary')->table('captainToken') ->updateOrInsert( ['captain_id' => $userId], [ 'token' => $request->input('token'), 'fingerPrint' => $request->input('fingerPrint'), 'status' => 'active' ] ); } else { DB::connection('primary')->table('tokens') ->updateOrInsert( ['passengerID' => $userId], [ 'token' => $request->input('token'), 'fingerPrint' => $request->input('fingerPrint'), 'status' => 'active' ] ); } return response()->json(['status' => 'success']); } /** GET /v2/notifications/token */ public function getToken(Request $request): JsonResponse { $userId = $request->attributes->get('_jwt_user_id') ?? $request->input('passengerID'); $userType = $request->attributes->get('_jwt_user_type') ?? 'passenger'; if (!$userId) { return response()->json(['status' => 'failure', 'message' => 'User ID missing'], 400); } if ($userType === 'driver') { $data = DB::connection('primary')->table('captainToken') ->where('captain_id', $userId) ->first(); } else { $data = DB::connection('primary')->table('tokens') ->where('passengerID', $userId) ->first(); } if (!$data) { return response()->json(['status' => 'failure', 'message' => 'No token found'], 404); } return response()->json([ 'status' => 'success', 'data' => [ 'token' => $data->token, 'fingerPrint' => $data->fingerPrint ?? null, ] ]); } }