Files
ladill-queue/routes/api.php
T
isaaccladandCursor bc6bf0a07c
Deploy Ladill Queue / deploy (push) Successful in 28s
Faster voice announcements, Care/Frontdesk API, and console UI polish.
Poll displays every 1.2s with client-side TTS ack; expose service API for sibling apps; redesign tickets, counters, and staff console.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:51:13 +00:00

82 lines
5.3 KiB
PHP

<?php
use App\Http\Controllers\Api\AnalyticsController;
use App\Http\Controllers\Api\AppointmentController;
use App\Http\Controllers\Api\BranchController;
use App\Http\Controllers\Api\ConsoleApiController;
use App\Http\Controllers\Api\CounterController;
use App\Http\Controllers\Api\DeviceHeartbeatController;
use App\Http\Controllers\Api\IntegrationController;
use App\Http\Controllers\Api\PublicQueueController;
use App\Http\Controllers\Api\QueueRuleController;
use App\Http\Controllers\Api\ReportController;
use App\Http\Controllers\Api\ServiceEventController;
use App\Http\Controllers\Api\ServiceQueueController;
use App\Http\Controllers\Api\TicketController;
use App\Http\Controllers\Api\WorkflowController;
use Illuminate\Support\Facades\Route;
Route::get('/health', fn () => response()->json(['status' => 'ok', 'app' => 'queue']));
Route::post('/devices/heartbeat', DeviceHeartbeatController::class)->name('api.devices.heartbeat');
Route::post('/service-events', ServiceEventController::class)->name('api.service-events');
Route::prefix('v1/public')->group(function () {
Route::post('/join', [PublicQueueController::class, 'join'])->name('api.public.join');
Route::get('/tickets/{qrToken}', [PublicQueueController::class, 'show'])->name('api.public.ticket');
Route::post('/tickets/{qrToken}/delay', [PublicQueueController::class, 'delay'])->name('api.public.ticket.delay');
Route::post('/tickets/{qrToken}/cancel', [PublicQueueController::class, 'cancel'])->name('api.public.ticket.cancel');
});
Route::middleware(['auth:sanctum', 'qms.setup'])->prefix('v1')->group(function () {
Route::get('/queues', [ServiceQueueController::class, 'index'])->name('api.queues.index');
Route::get('/queues/{serviceQueue}/waiting', [ServiceQueueController::class, 'waiting'])->name('api.queues.waiting');
Route::post('/queues/{serviceQueue}/pause', [ServiceQueueController::class, 'pause'])->name('api.queues.pause');
Route::post('/queues/{serviceQueue}/resume', [ServiceQueueController::class, 'resume'])->name('api.queues.resume');
Route::get('/tickets', [TicketController::class, 'index'])->name('api.tickets.index');
Route::post('/tickets', [TicketController::class, 'store'])->name('api.tickets.store');
Route::get('/tickets/{ticket}', [TicketController::class, 'show'])->name('api.tickets.show');
Route::post('/tickets/{ticket}/action', [TicketController::class, 'action'])->name('api.tickets.action');
Route::post('/queues/{serviceQueue}/call-next', [TicketController::class, 'callNext'])->name('api.queues.call-next');
Route::get('/counters', [CounterController::class, 'index'])->name('api.counters.index');
Route::post('/counters', [CounterController::class, 'store'])->name('api.counters.store');
Route::get('/appointments', [AppointmentController::class, 'index'])->name('api.appointments.index');
Route::post('/appointments', [AppointmentController::class, 'store'])->name('api.appointments.store');
Route::post('/appointments/{appointment}/check-in', [AppointmentController::class, 'checkIn'])->name('api.appointments.check-in');
Route::get('/workflows', [WorkflowController::class, 'index'])->name('api.workflows.index');
Route::get('/workflows/{workflow}', [WorkflowController::class, 'show'])->name('api.workflows.show');
Route::get('/queues/{serviceQueue}/rules', [QueueRuleController::class, 'index'])->name('api.rules.index');
Route::post('/queues/{serviceQueue}/rules', [QueueRuleController::class, 'store'])->name('api.rules.store');
Route::get('/analytics/overview', [AnalyticsController::class, 'overview'])->name('api.analytics.overview');
Route::get('/reports/{type}', [ReportController::class, 'show'])->name('api.reports.show');
Route::get('/branches', [BranchController::class, 'index'])->name('api.branches.index');
Route::post('/branches', [BranchController::class, 'store'])->name('api.branches.store');
});
Route::middleware(['auth.service:qms'])->prefix('v1')->group(function () {
Route::get('/integrations/status', [IntegrationController::class, 'status'])->name('api.integrations.status');
Route::post('/integrations/provision', [IntegrationController::class, 'provision'])->name('api.integrations.provision');
Route::patch('/integrations', [IntegrationController::class, 'update'])->name('api.integrations.update');
});
Route::middleware(['auth.service:qms', 'qms.integration'])->prefix('v1')->group(function () {
Route::get('/queues', [ServiceQueueController::class, 'index'])->name('api.service.queues.index');
Route::get('/queues/{serviceQueue}/waiting', [ServiceQueueController::class, 'waiting'])->name('api.service.queues.waiting');
Route::post('/queues/{serviceQueue}/call-next', [TicketController::class, 'callNext'])->name('api.service.queues.call-next');
Route::get('/tickets', [TicketController::class, 'index'])->name('api.service.tickets.index');
Route::post('/tickets/{ticket}/action', [TicketController::class, 'action'])->name('api.service.tickets.action');
Route::get('/counters', [CounterController::class, 'index'])->name('api.service.counters.index');
Route::get('/counters/{counter}/console', [ConsoleApiController::class, 'show'])->name('api.service.counters.console');
Route::post('/counters/{counter}/console', [ConsoleApiController::class, 'action'])->name('api.service.counters.console.action');
});