where('user_id', $userId)->first(); return $row ?: null; } public function getAdminDoctorList(string $sortBy = 'doctor_id', string $sortDir = 'asc'): array { $fullNameSql = "TRIM(CONCAT(COALESCE(users.first_name, ''), ' ', COALESCE(users.last_name, '')))"; $sortColumns = [ 'doctor_id' => 'users.id', 'name' => $fullNameSql, 'email' => 'users.email', 'specialization' => 'doctors.specialization', 'experience' => 'doctors.experience', 'fees' => 'doctors.fees', 'status' => 'users.status', ]; $sortColumn = $sortColumns[$sortBy] ?? 'users.id'; $sortDir = strtolower($sortDir) === 'desc' ? 'DESC' : 'ASC'; return $this->asObject() ->select("users.id as user_id, COALESCE(NULLIF(users.formatted_user_id, ''), CONCAT('PHY', LPAD(users.id, 7, '0'))) as formatted_user_id, {$fullNameSql} as name, users.email, users.first_name, users.last_name, users.status, doctors.id, doctors.specialization, doctors.experience, doctors.fees") ->join('users', 'users.id = doctors.user_id') ->where('users.role', 'doctor') ->orderBy($sortColumn, $sortDir) ->findAll(); } public function getLatestDoctors(int $limit = 5): array { return $this->select("TRIM(CONCAT(COALESCE(users.first_name, ''), ' ', COALESCE(users.last_name, ''))) as name, doctors.specialization") ->join('users', 'users.id = doctors.user_id') ->orderBy('doctors.id', 'DESC') ->findAll($limit); } }