namespace ahgResearchPlugin\Service;class ResearcherService{ // Registration public function register(array $data): int public function updateProfile(int $id, array $data): bool public function getResearcher(int $id): ?array public function getResearcherByUser(int $userId): ?array public function verifyIdentity(int $id, int $verifiedBy): bool public function approveResearcher(int $id, int $approvedBy): bool public function issueCard(int $id, string $cardNumber, DateTime $expires): bool // Bookings public function createBooking(int $researcherId, array $data): int public function updateBooking(int $id, array $data): bool public function cancelBooking(int $id, string $reason): bool public function checkIn(int $bookingId, string $deskNumber): bool public function checkOut(int $bookingId): bool public function getBookings(int $researcherId): Collection public function getBookingsForDate(DateTime $date, int $roomId): Collection public function getAvailableSlots(DateTime $date, int $roomId): array // Workspace public function createWorkspace(int $researcherId, array $data): int public function addToWorkspace(int $workspaceId, int $objectId): bool public function removeFromWorkspace(int $workspaceId, int $objectId): bool public function getWorkspaces(int $researcherId): Collection // Citations public function generateCitation(int $objectId, string $style): string public function logCitation(int $researcherId, int $objectId, string $style, string $text): int public function getCitationHistory(int $researcherId): Collection // Annotations public function createAnnotation(int $researcherId, int $objectId, array $data): int public function getAnnotations(int $researcherId, ?int $objectId = null): Collection}
namespace ahgResearchPlugin\Service;class SeatService{ // Seat Management public function getSeatsForRoom(int $roomId): Collection public function getSeat(int $seatId): ?object public function createSeat(int $roomId, array $data): int public function updateSeat(int $seatId, array $data): bool public function deleteSeat(int $seatId): bool public function bulkCreateSeats(int $roomId, string $pattern, string $type, ?string $zone): array // Seat Assignment public function getAvailableSeats(int $roomId, ?string $type = null): Collection public function assignSeat(int $seatId, ?int $bookingId, ?int $walkInId, int $assignedBy): int public function releaseSeat(int $assignmentId): bool public function markSeatOccupied(int $seatId): bool public function getSeatAssignment(int $seatId): ?object public function autoAssignSeat(int $roomId, int $bookingId): ?int // Occupancy public function getRoomOccupancy(int $roomId): array public function getSeatMapData(int $roomId): array public function getSeatStatistics(int $roomId, ?DateTime $from, ?DateTime $to): array}
namespace ahgResearchPlugin\Service;class EquipmentService{ // Equipment Management public function getEquipmentForRoom(int $roomId): Collection public function getEquipment(int $equipmentId): ?object public function createEquipment(int $roomId, array $data): int public function updateEquipment(int $equipmentId, array $data): bool public function deleteEquipment(int $equipmentId): bool public function getEquipmentTypeCounts(int $roomId): Collection // Equipment Booking public function getAvailableEquipment(int $roomId, ?string $type = null): Collection public function createBooking(int $equipmentId, int $roomBookingId): int public function getBooking(int $bookingId): ?object public function getResearcherBookings(int $roomBookingId): Collection public function getBookingsForRoomBooking(int $roomBookingId): Collection public function checkOut(int $bookingId, int $userId): bool public function returnEquipment(int $bookingId, int $userId, ?string $condition): bool public function cancelBooking(int $bookingId): bool public function markNoShow(int $bookingId): bool // Maintenance public function getEquipmentNeedingMaintenance(): Collection public function logMaintenance(int $equipmentId, string $description, string $newCondition, ?DateTime $nextDate): bool public function getUsageStatistics(int $roomId, ?DateTime $from, ?DateTime $to): array public function getDailySchedule(int $roomId, DateTime $date): Collection}
namespace ahgResearchPlugin\Service;class RetrievalService{ // Queue Management public function getQueues(): Collection public function getQueue(int $queueId): ?object public function getQueueByCode(string $code): ?object public function getQueueRequests(int $queueId): Collection public function getQueueCounts(): array public function moveToQueue(int $requestId, int $queueId, ?string $notes): bool public function batchUpdateStatus(array $requestIds, string $status, ?string $notes): int // Retrieval Schedules public function getRetrievalSchedules(int $roomId): Collection public function createRetrievalSchedule(int $roomId, array $data): int public function getNextRetrievalRun(int $roomId): ?DateTime public function getRequestsForRetrieval(int $roomId): Collection public function updateRequestStatus(int $requestId, string $status, ?string $notes): bool // Call Slips public function getPrintTemplate(string $code): ?object public function getCallSlipData(int $requestId): array public function renderCallSlip(int $requestId): string public function renderBatchCallSlips(array $requestIds): string public function markCallSlipPrinted(int $requestId, int $userId): bool // Walk-In Visitors public function registerWalkIn(int $roomId, array $data, int $registeredBy): int public function checkOutWalkIn(int $walkInId): bool public function getCurrentWalkIns(int $roomId): Collection public function convertWalkInToResearcher(int $walkInId): int // Statistics public function getRetrievalStatistics(?DateTime $from, ?DateTime $to): array}