// Authentication use App\Controllers\AuthController; use App\Core\RolePermissions; use App\Middlewares\AuthMiddleware; use App\Middlewares\PermissionMiddleware; $router->add('POST', '/api/login', [AuthController::class, 'login']); $router->add('POST', '/api/logout', [AuthController::class, 'logout']); $router->add('GET', '/api/me', [AuthController::class, 'me']); $router->add('GET', '/api/me/permissions', [AuthController::class, 'permissions'], [AuthMiddleware::class]); $router->add('GET', '/api/me/context', [AuthController::class, 'context'], [AuthMiddleware::class]); $router->add('POST', '/api/auth/switch-company', [AuthController::class, 'switchCompany'], [AuthMiddleware::class]); $router->add('GET', '/api/auth/my-companies', [AuthController::class, 'myCompanies'], [AuthMiddleware::class]); $router->add('GET', '/api/departments', function() { $companyId = \App\Core\Auth::getCompanyId(); if (!$companyId) { http_response_code(401); echo json_encode(['status' => 'error', 'message' => 'Não autenticado']); return; } $repo = new \App\Repositories\DepartmentRepository(); $depts = $repo->findByCompanyId($companyId); header('Content-Type: application/json'); echo json_encode(['status' => 'success', 'data' => $depts]); }, [AuthMiddleware::class]); // --- PROTECTED ROUTES --- // Meta WhatsApp Webhook endpoints (Public for Meta) $router->add('GET', '/api/webhooks/whatsapp', [WhatsAppWebhookController::class, 'verify']); $router->add('POST', '/api/webhooks/whatsapp', [WhatsAppWebhookController::class, 'handle']); // Meta Embedded Signup use App\Controllers\MetaAuthController; $router->add('POST', '/api/meta/embedded-signup', [MetaAuthController::class, 'saveEmbeddedSignup'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_COMPANY_MANAGE], ]); // User Management $router->add('GET', '/api/users', [UserController::class, 'index'], [AuthMiddleware::class]); $router->add('POST', '/api/users', [UserController::class, 'store'], [AuthMiddleware::class]); $router->add('DELETE', '/api/users/{id}', [UserController::class, 'destroy'], [AuthMiddleware::class]); // Ticket System $router->add('GET', '/api/tickets', [TicketController::class, 'index'], [AuthMiddleware::class]); $router->add('GET', '/api/tickets/{id}', [TicketController::class, 'show'], [AuthMiddleware::class]); $router->add('GET', '/api/tickets/{id}/messages', [TicketController::class, 'messages'], [AuthMiddleware::class]); $router->add('POST', '/api/tickets/{id}/reply', [TicketController::class, 'reply'], [AuthMiddleware::class]); $router->add('POST', '/api/tickets/{id}/resolve', [TicketController::class, 'resolve'], [AuthMiddleware::class]); $router->add('PUT', '/api/tickets/{id}/status', [TicketController::class, 'changeStatus'], [AuthMiddleware::class]); $router->add('POST', '/api/tickets/{id}/transfer', [TicketController::class, 'transfer'], [AuthMiddleware::class]); $router->add('POST', '/api/tickets/{id}/note', [TicketController::class, 'addNote'], [AuthMiddleware::class]); // Dashboard Metrics use App\Controllers\DashboardController; $router->add('GET', '/api/dashboard/metrics', [DashboardController::class, 'metrics'], [AuthMiddleware::class]); // Companies (Tenants) use App\Controllers\CompanyController; use App\Middlewares\MasterMiddleware; $router->add('GET', '/api/my-company', [CompanyController::class, 'showMyCompany'], [AuthMiddleware::class]); $router->add('PUT', '/api/my-company', [CompanyController::class, 'updateMyCompany'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_COMPANY_MANAGE], ]); $router->add('GET', '/api/companies', [CompanyController::class, 'index'], [AuthMiddleware::class, MasterMiddleware::class]); $router->add('POST', '/api/companies', [CompanyController::class, 'store'], [AuthMiddleware::class, MasterMiddleware::class]); $router->add('PUT', '/api/companies/{id}', [CompanyController::class, 'update'], [AuthMiddleware::class, MasterMiddleware::class]); $router->add('PUT', '/api/companies/{id}/status', [CompanyController::class, 'changeStatus'], [AuthMiddleware::class, MasterMiddleware::class]); // Plans (Packages) use App\Controllers\PlanController; $router->add('GET', '/api/plans', [PlanController::class, 'index'], [AuthMiddleware::class, MasterMiddleware::class]); $router->add('POST', '/api/plans', [PlanController::class, 'store'], [AuthMiddleware::class, MasterMiddleware::class]); $router->add('DELETE', '/api/plans/{id}', [PlanController::class, 'destroy'], [AuthMiddleware::class, MasterMiddleware::class]); // Email Templates use App\Controllers\EmailTemplateController; $router->add('GET', '/api/email-templates', [EmailTemplateController::class, 'index'], [AuthMiddleware::class]); $router->add('POST', '/api/email-templates', [EmailTemplateController::class, 'store'], [AuthMiddleware::class]); $router->add('PUT', '/api/email-templates/{id}', [EmailTemplateController::class, 'update'], [AuthMiddleware::class]); // Campaigns (Broadcasting) use App\Controllers\CampaignController; $router->add('GET', '/api/campaigns', [CampaignController::class, 'index'], [AuthMiddleware::class]); $router->add('POST', '/api/campaigns', [CampaignController::class, 'store'], [AuthMiddleware::class]); $router->add('PUT', '/api/campaigns/{id}', [CampaignController::class, 'update'], [AuthMiddleware::class]); $router->add('DELETE', '/api/campaigns/{id}', [CampaignController::class, 'destroy'], [AuthMiddleware::class]); $router->add('POST', '/api/campaigns/{id}/start', [CampaignController::class, 'start'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_CAMPAIGNS_SEND], ]); $router->add('POST', '/api/campaigns/{id}/pause', [CampaignController::class, 'pause'], [AuthMiddleware::class]); // AI Agent use App\Controllers\AiAgentController; $router->add('GET', '/api/ai-agent', [AiAgentController::class, 'show'], [AuthMiddleware::class]); $router->add('POST', '/api/ai-agent', [AiAgentController::class, 'store'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_AI_MANAGE], ]); $router->add('PUT', '/api/ai-agent/{id}', [AiAgentController::class, 'update'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_AI_MANAGE], ]); $router->add('DELETE', '/api/ai-agent/{id}', [AiAgentController::class, 'destroy'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_AI_MANAGE], ]); // Media Uploads use App\Controllers\MediaController; $router->add('POST', '/api/upload', [MediaController::class, 'upload'], [AuthMiddleware::class]); $router->add('GET', '/api/media', [MediaController::class, 'index'], [AuthMiddleware::class]); // WhatsApp Web.js (QR Code) use App\Controllers\WaWebJsController; $router->add('GET', '/api/wa-webjs/status', [WaWebJsController::class, 'status'], [AuthMiddleware::class]); $router->add('POST', '/api/wa-webjs/start', [WaWebJsController::class, 'start'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_WA_WEBJS_ADMIN], ]); $router->add('POST', '/api/wa-webjs/logout', [WaWebJsController::class, 'logout'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_WA_WEBJS_ADMIN], ]); $router->add('POST', '/api/wa-webjs/sync', [WaWebJsController::class, 'syncChats'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_WA_WEBJS_ADMIN], ]); $router->add('POST', '/api/wa-webjs/webhook', [WhatsAppWebhookController::class, 'handle']); // WhatsApp Templates (Meta Business API) use App\Controllers\WhatsAppTemplateController; $router->add('GET', '/api/whatsapp/templates', [WhatsAppTemplateController::class, 'index'], [AuthMiddleware::class]); // ========================================== // EMAIL MARKETING MODULE // ========================================== // SMTP Accounts (Multiple) use App\Controllers\SmtpAccountController; $router->add('GET', '/api/emails/accounts', [SmtpAccountController::class, 'index'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/accounts', [SmtpAccountController::class, 'store'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_EMAIL_SMTP], ]); $router->add('POST', '/api/emails/accounts/bulk', [SmtpAccountController::class, 'bulkStore'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_EMAIL_SMTP], ]); $router->add('POST', '/api/emails/accounts/test', [SmtpAccountController::class, 'test'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_EMAIL_SMTP], ]); $router->add('DELETE', '/api/emails/accounts/{id}', [SmtpAccountController::class, 'destroy'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_EMAIL_SMTP], ]); // SMTP Settings (Legacy/Single) use App\Controllers\SmtpSettingsController; $router->add('GET', '/api/emails/smtp', [SmtpSettingsController::class, 'show'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/smtp', [SmtpSettingsController::class, 'save'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_EMAIL_SMTP], ]); // Leads use App\Controllers\LeadController; $router->add('GET', '/api/leads', [LeadController::class, 'index'], [AuthMiddleware::class]); $router->add('POST', '/api/leads', [LeadController::class, 'store'], [AuthMiddleware::class]); $router->add('PUT', '/api/leads/{id}', [LeadController::class, 'update'], [AuthMiddleware::class]); $router->add('POST', '/api/leads/{id}', [LeadController::class, 'update'], [AuthMiddleware::class]); $router->add('DELETE', '/api/leads/{id}', [LeadController::class, 'destroy'], [AuthMiddleware::class]); $router->add('GET', '/api/emails/leads', [LeadController::class, 'index'], [AuthMiddleware::class]); $router->add('GET', '/api/emails/leads/lists', [LeadController::class, 'getLists'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/leads', [LeadController::class, 'store'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/leads/import-csv', [LeadController::class, 'importCsv'], [AuthMiddleware::class]); $router->add('DELETE', '/api/emails/leads/all', [LeadController::class, 'clearAll'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/leads/clear-list', [LeadController::class, 'clearList'], [AuthMiddleware::class]); $router->add('DELETE', '/api/emails/leads/{id}', [LeadController::class, 'destroy'], [AuthMiddleware::class]); // Email Campaigns use App\Controllers\EmailCampaignController; $router->add('GET', '/api/emails/campaigns', [EmailCampaignController::class, 'index'], [AuthMiddleware::class]); $router->add('GET', '/api/emails/campaigns/{id}', [EmailCampaignController::class, 'show'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/campaigns', [EmailCampaignController::class, 'store'], [AuthMiddleware::class]); $router->add('PUT', '/api/emails/campaigns/{id}', [EmailCampaignController::class, 'update'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/campaigns/{id}/activate', [EmailCampaignController::class, 'activate'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/campaigns/{id}/pause', [EmailCampaignController::class, 'pause'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/campaigns/{id}/send_next', [EmailCampaignController::class, 'sendNext'], [AuthMiddleware::class]); $router->add('GET', '/api/emails/campaigns/{id}/stats', [EmailCampaignController::class, 'stats'], [AuthMiddleware::class]); $router->add('GET', '/api/emails/campaigns/{id}/history', [EmailCampaignController::class, 'history'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/campaigns/{id}/retry_failed', [EmailCampaignController::class, 'retryFailed'], [AuthMiddleware::class]); $router->add('POST', '/api/emails/campaigns/{id}/restart', [EmailCampaignController::class, 'restart'], [AuthMiddleware::class]); $router->add('GET', '/api/admin/emails/campaigns', [EmailCampaignController::class, 'adminIndex'], [AuthMiddleware::class, MasterMiddleware::class]); $router->add('GET', '/api/admin/whatsapp/campaigns', function () { try { $repo = new \App\Repositories\CampaignRepository(); $campaigns = $repo->findAllAdmin(); foreach ($campaigns as &$c) { $c['stats'] = $repo->getCampaignStats((int) $c['id']); $c['text_variations'] = json_decode($c['text_variations'], true) ?: []; $c['media_variations'] = json_decode($c['media_variations'] ?? '[]', true) ?: []; } unset($c); header('Content-Type: application/json'); echo json_encode(['status' => 'success', 'data' => $campaigns]); } catch (\Exception $e) { http_response_code(500); header('Content-Type: application/json'); echo json_encode(['status' => 'error', 'message' => $e->getMessage()]); } }, [AuthMiddleware::class, MasterMiddleware::class]); // ========================================== // CRM AGENDA MODULE // ========================================== use App\Controllers\CrmAppointmentController; $router->add('GET', '/api/crm/appointments', [CrmAppointmentController::class, 'list'], [AuthMiddleware::class]); $router->add('POST', '/api/crm/appointments', [CrmAppointmentController::class, 'create'], [AuthMiddleware::class]); $router->add('PUT', '/api/crm/appointments/{id}', [CrmAppointmentController::class, 'update'], [AuthMiddleware::class]); $router->add('DELETE', '/api/crm/appointments/{id}', [CrmAppointmentController::class, 'delete'], [AuthMiddleware::class]); $router->add('PUT', '/api/crm/appointments/{id}/status', [CrmAppointmentController::class, 'updateStatus'], [AuthMiddleware::class]); $router->add('GET', '/api/crm/appointments/today', [CrmAppointmentController::class, 'todaysTasks'], [AuthMiddleware::class]); $router->add('GET', '/api/crm/appointments/history', [CrmAppointmentController::class, 'getHistory'], [AuthMiddleware::class]); // ========================================== // PROJECT MANAGEMENT MODULE // ========================================== use App\Controllers\ProjectController; $router->add('GET', '/api/gp/data', [ProjectController::class, 'load'], [AuthMiddleware::class]); $router->add('POST', '/api/gp/sync', [ProjectController::class, 'sync'], [AuthMiddleware::class]); $router->add('POST', '/api/gp/clear-example-data', [ProjectController::class, 'clearExampleData'], [AuthMiddleware::class]); // ========================================== // CUSTOMER EVALUATION / DIAGNOSTIC 360 MODULE // ========================================== use App\Controllers\EvaluationController; use App\Controllers\EvaluationFormController; $router->add('POST', '/api/public/evaluations', [EvaluationController::class, 'receivePublic']); $router->add('OPTIONS', '/api/public/evaluations', [EvaluationController::class, 'receivePublic']); $router->add('GET', '/api/public/forms/{slug}', [EvaluationFormController::class, 'publicConfig']); $router->add('POST', '/api/public/forms/{slug}/submit',[EvaluationFormController::class, 'publicSubmit']); $router->add('OPTIONS', '/api/public/forms/{slug}/submit',[EvaluationFormController::class, 'publicSubmit']); $router->add('GET', '/api/evaluations', [EvaluationController::class, 'index'], [AuthMiddleware::class]); $router->add('GET', '/api/evaluations/stats', [EvaluationController::class, 'stats'], [AuthMiddleware::class]); $router->add('GET', '/api/evaluations/{id}', [EvaluationController::class, 'show'], [AuthMiddleware::class]); $router->add('DELETE', '/api/evaluations/{id}', [EvaluationController::class, 'destroy'], [AuthMiddleware::class]); $router->add('GET', '/api/evaluation-forms', [EvaluationFormController::class, 'index'], [AuthMiddleware::class]); $router->add('GET', '/api/evaluation-forms/defaults', [EvaluationFormController::class, 'defaults'], [AuthMiddleware::class]); $router->add('POST', '/api/evaluation-forms', [EvaluationFormController::class, 'store'], [AuthMiddleware::class]); $router->add('GET', '/api/evaluation-forms/{id}', [EvaluationFormController::class, 'show'], [AuthMiddleware::class]); $router->add('PUT', '/api/evaluation-forms/{id}', [EvaluationFormController::class, 'update'], [AuthMiddleware::class]); $router->add('DELETE', '/api/evaluation-forms/{id}', [EvaluationFormController::class, 'destroy'], [AuthMiddleware::class]); $router->add('POST', '/api/evaluation-forms/{id}/duplicate', [EvaluationFormController::class, 'duplicate'], [AuthMiddleware::class]); $router->add('GET', '/api/evaluation-forms/{id}/stats', [EvaluationFormController::class, 'stats'], [AuthMiddleware::class]); // ========================================== // PRODUCTS & SERVICES CATALOG MODULE // ========================================== use App\Controllers\ProductServiceController; $router->add('GET', '/api/products-services', [ProductServiceController::class, 'index'], [AuthMiddleware::class]); $router->add('GET', '/api/products-services/stats', [ProductServiceController::class, 'stats'], [AuthMiddleware::class]); $router->add('POST', '/api/products-services/bulk', [ProductServiceController::class, 'bulkStore'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_CATALOG_MANAGE], ]); $router->add('GET', '/api/products-services/{id}', [ProductServiceController::class, 'show'], [AuthMiddleware::class]); $router->add('POST', '/api/products-services', [ProductServiceController::class, 'store'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_CATALOG_MANAGE], ]); $router->add('PUT', '/api/products-services/{id}', [ProductServiceController::class, 'update'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_CATALOG_MANAGE], ]); $router->add('DELETE', '/api/products-services/{id}', [ProductServiceController::class, 'destroy'], [ AuthMiddleware::class, [PermissionMiddleware::class, RolePermissions::PERM_CATALOG_MANAGE], ]); // ========================================== // QUOTATIONS / ORÇAMENTOS MODULE // ========================================== use App\Controllers\QuotationController; $router->add('GET', '/api/quotations', [QuotationController::class, 'index'], [AuthMiddleware::class]); $router->add('GET', '/api/quotations/stats', [QuotationController::class, 'stats'], [AuthMiddleware::class]); $router->add('GET', '/api/quotations/{id}', [QuotationController::class, 'show'], [AuthMiddleware::class]); $router->add('POST', '/api/quotations', [QuotationController::class, 'store'], [AuthMiddleware::class]); $router->add('PUT', '/api/quotations/{id}', [QuotationController::class, 'update'], [AuthMiddleware::class]); $router->add('DELETE', '/api/quotations/{id}', [QuotationController::class, 'destroy'], [AuthMiddleware::class]);
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/src/Routes/api.php:1) in /var/www/html/src/Core/Router.php on line 58
404 Not Found