enc = $enc; } /** * GET /v2/profile/passenger */ public function passenger(Request $request): JsonResponse { $id = $request->attributes->get('_jwt_user_id'); $passenger = Passenger::active()->find($id); if (!$passenger) { return response()->json(['status' => 'failure', 'message' => 'Not found'], 404); } $data = $passenger->toArray(); $data = $this->enc->decryptFields($data, Passenger::ENCRYPTED_FIELDS); unset($data['password'], $data['api_secret']); // Note: Wallet balance is managed by the dedicated payment server. // Flutter fetches it directly via the wallet JWT token. // Attach rating $rating = DB::connection('primary')->table('ratingPassenger') ->where('passenger_id', $id)->avg('rating'); $data['rating'] = round($rating ?? 5.0, 2); return response()->json(['status' => 'success', 'message' => $data]); } /** * GET /v2/profile/driver */ public function driver(Request $request): JsonResponse { $id = $request->attributes->get('_jwt_user_id'); $driver = Driver::active()->byId($id)->first(); if (!$driver) { return response()->json(['status' => 'failure', 'message' => 'Not found'], 404); } $data = $driver->toArray(); $data = $this->enc->decryptFields($data, Driver::ENCRYPTED_FIELDS); unset($data['password'], $data['api_secret']); // Car info $car = CarRegistration::where('driverID', $id)->where('isDefault', 1)->first(); if ($car) { $carData = $car->toArray(); $data['car'] = $this->enc->decryptFields($carData, CarRegistration::ENCRYPTED_FIELDS); } // Profile image $image = ImageProfileCaptain::where('driverID', $id)->first(); $data['profile_image'] = $image->link ?? null; // Rating $data['rating'] = $driver->getAverageRating(); // Note: Wallet balance is managed by the dedicated payment server. // Flutter fetches it directly via the wallet JWT token. // Ride count $data['ride_count'] = DB::connection('ride')->table('ride') ->where('driver_id', $id)->where('status', 'finish')->count(); return response()->json(['status' => 'success', 'message' => $data]); } /** * PUT /v2/profile/passenger */ public function updatePassenger(Request $request): JsonResponse { $id = $request->attributes->get('_jwt_user_id'); $passenger = Passenger::active()->find($id); if (!$passenger) { return response()->json(['status' => 'failure', 'message' => 'Not found'], 404); } $updates = []; $encryptableFields = [ 'first_name', 'last_name', 'gender', 'birthdate', 'sosPhone', 'site', 'education', 'employmentType', 'maritalStatus' ]; foreach ($encryptableFields as $field) { if ($request->has($field)) { $updates[$field] = $this->enc->encrypt($request->input($field)); } } if (!empty($updates)) { $passenger->update($updates); } return response()->json(['status' => 'success', 'message' => 'Profile updated']); } /** * PUT /v2/profile/driver/email */ public function updateDriverEmail(Request $request): JsonResponse { $request->validate(['email' => 'required|email']); $id = $request->attributes->get('_jwt_user_id'); $driver = Driver::active()->byId($id)->first(); if (!$driver) { return response()->json(['status' => 'failure', 'message' => 'Not found'], 404); } $driver->update([ 'email' => $this->enc->encrypt($request->input('email')), ]); return response()->json(['status' => 'success', 'message' => 'Email updated']); } /** * POST /v2/profile/driver/shamcash */ public function updateShamCash(Request $request): JsonResponse { $id = $request->attributes->get('_jwt_user_id'); $driver = Driver::active()->byId($id)->first(); if (!$driver) { return response()->json(['status' => 'failure', 'message' => 'Not found'], 404); } $accountBank = $request->input('accountBank') ?? $request->input('accountNumber'); $bankCode = $request->input('bankCode') ?? $request->input('paymentProvider'); if (!$accountBank || !$bankCode) { return response()->json(['status' => 'failure', 'message' => 'Missing fields'], 400); } $driver->update([ 'accountBank' => $this->enc->encrypt($accountBank), 'bankCode' => $bankCode, ]); return response()->json(['status' => 'success', 'message' => 'Sham Cash details updated']); } }