Dispatcher.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace Routes;
  3. use FrameworkX\App;
  4. use Middlewares\JwtAuthMiddleware;
  5. use Middlewares\RoleMiddleware;
  6. use Libs\Roles;
  7. /**
  8. * Registro central de rotas da API.
  9. *
  10. * Mantém a definição das rotas fora do bootstrap (public/index.php),
  11. * concentrando aqui a tabela de endpoints, a autenticação (JWT) e a
  12. * autorização por papel (RBAC).
  13. *
  14. * Convenção de middlewares por rota (a ordem importa):
  15. * 1) JwtAuthMiddleware -> autentica e popula "user_role" a partir do banco;
  16. * 2) RoleMiddleware -> autoriza conforme os papéis permitidos.
  17. */
  18. final class Dispatcher
  19. {
  20. public static function register(App $app): void
  21. {
  22. $auth = new JwtAuthMiddleware();
  23. // ---- Público (sem autenticação) -------------------------------------
  24. // Login é protegido contra brute-force via RateLimiter no controller.
  25. $app->post('/v1/login', \Controllers\LoginController::class);
  26. // ---- Somente admin --------------------------------------------------
  27. // Cadastro de usuários: o novo usuário herda o company_id do solicitante.
  28. $app->post('/v1/register', $auth, new RoleMiddleware(Roles::ADMIN), \Controllers\RegisterController::class);
  29. // ---- Autenticado (qualquer papel válido) ----------------------------
  30. self::registerAuthenticated($app, $auth);
  31. }
  32. /**
  33. * Rotas que exigem apenas um usuário autenticado, sem restrição de papel.
  34. * Para restringir uma destas no futuro, basta inserir um RoleMiddleware
  35. * entre $auth e o controller (ex.: new RoleMiddleware(Roles::ADMIN, Roles::MANAGER)).
  36. */
  37. private static function registerAuthenticated(App $app, JwtAuthMiddleware $auth): void
  38. {
  39. // Perfil do usuário autenticado.
  40. $app->get('/v1/me', $auth, \Controllers\MeController::class);
  41. $app->post('/v1/me/change-password', $auth, \Controllers\MeChangePasswordController::class);
  42. // Dashboards e analytics (leitura).
  43. $app->get('/v1/dashboard/overview', $auth, \Controllers\DashboardOverviewController::class);
  44. $app->get('/v1/interactions', $auth, \Controllers\InteractionsController::class);
  45. $app->get('/v1/interactions/details', $auth, \Controllers\InteractionDetailsController::class);
  46. $app->get('/v1/analytics/sentiment/dashboard', $auth, \Controllers\AnalyticsSentimentDashboardController::class);
  47. $app->get('/v1/personas/overview', $auth, \Controllers\PersonasOverviewController::class);
  48. $app->get('/v1/evolution/overview', $auth, \Controllers\EvolutionOverviewController::class);
  49. $app->get('/v1/executive/dashboard', $auth, \Controllers\ExecutiveDashboardController::class);
  50. // SLA.
  51. $app->get('/v1/sla/configs', $auth, \Controllers\SlaConfigsController::class);
  52. $app->get('/v1/sla/live-status', $auth, \Controllers\SlaLiveStatusController::class);
  53. $app->post('/v1/sla/configs', $auth, \Controllers\SlaSaveConfigController::class);
  54. // Agentes.
  55. $app->get('/v1/agents', $auth, \Controllers\AgentsController::class);
  56. $app->post('/v1/agents', $auth, \Controllers\AgentSaveController::class);
  57. $app->post('/v1/agents/status', $auth, \Controllers\AgentStatusController::class);
  58. $app->post('/v1/agents/escalation', $auth, \Controllers\AgentEscalationController::class);
  59. }
  60. }