router(); $template = $app->template(); $auth = $app->auth(); $translator = $app->translator(); $authController = new AuthController($template, $auth, $translator); $usersController = new UsersController($template, $translator, $auth, $app->users()); $shipmentPackageRepositoryForOrders = new ShipmentPackageRepository($app->db()); $receiptConfigRepository = new ReceiptConfigRepository($app->db()); $receiptRepository = new ReceiptRepository($app->db()); $settingsController = new SettingsController($template, $translator, $auth, $app->migrator(), $app->orderStatuses()); $allegroIntegrationRepository = new AllegroIntegrationRepository( $app->db(), (string) $app->config('app.integrations.secret', '') ); $allegroStatusMappingRepository = new AllegroStatusMappingRepository($app->db()); $carrierDeliveryMappings = new CarrierDeliveryMethodMappingRepository($app->db()); $allegroOAuthClient = new AllegroOAuthClient(); $allegroTokenManager = new AllegroTokenManager($allegroIntegrationRepository, $allegroOAuthClient); $apaczkaApiClient = new ApaczkaApiClient(); $cronRepository = new CronRepository($app->db()); $apaczkaIntegrationRepository = new ApaczkaIntegrationRepository( $app->db(), (string) $app->config('app.integrations.secret', '') ); $allegroStatusDiscoveryService = new AllegroStatusDiscoveryService( $allegroTokenManager, new AllegroApiClient(), $allegroStatusMappingRepository ); $allegroStatusMappingController = new AllegroStatusMappingController( $translator, $allegroStatusMappingRepository, $app->orderStatuses(), $allegroStatusDiscoveryService ); $allegroDeliveryMappingController = new AllegroDeliveryMappingController( $translator, $allegroIntegrationRepository, $allegroOAuthClient, new AllegroApiClient(), $carrierDeliveryMappings, $apaczkaIntegrationRepository, $apaczkaApiClient ); $allegroIntegrationController = new AllegroIntegrationController( $template, $translator, $auth, $allegroIntegrationRepository, $allegroStatusMappingRepository, $app->orderStatuses(), $cronRepository, $allegroOAuthClient, new AllegroOrderImportService( $allegroIntegrationRepository, $allegroTokenManager, new AllegroApiClient(), new OrderImportRepository($app->db()), $allegroStatusMappingRepository, new OrdersRepository($app->db()) ), $allegroStatusDiscoveryService, (string) $app->config('app.url', ''), $allegroDeliveryMappingController ); $apaczkaIntegrationController = new ApaczkaIntegrationController( $template, $translator, $auth, $apaczkaIntegrationRepository, $apaczkaApiClient ); $inpostIntegrationRepository = new InpostIntegrationRepository( $app->db(), (string) $app->config('app.integrations.secret', '') ); $inpostIntegrationController = new InpostIntegrationController( $template, $translator, $auth, $inpostIntegrationRepository ); $shopproIntegrationsRepository = new ShopproIntegrationsRepository( $app->db(), (string) $app->config('app.integrations.secret', '') ); $shopproIntegrationsController = new ShopproIntegrationsController( $template, $translator, $auth, $shopproIntegrationsRepository, new ShopproStatusMappingRepository($app->db()), $app->orderStatuses(), $cronRepository, $carrierDeliveryMappings, $allegroIntegrationRepository, $allegroOAuthClient, new AllegroApiClient(), $apaczkaIntegrationRepository, $apaczkaApiClient ); $integrationsHubController = new IntegrationsHubController( $template, $translator, $auth, new IntegrationsRepository($app->db()), $allegroIntegrationRepository, $apaczkaIntegrationRepository, $inpostIntegrationRepository, $shopproIntegrationsRepository ); $cronSettingsController = new CronSettingsController( $template, $translator, $auth, $cronRepository, (bool) $app->config('app.cron.run_on_web_default', false), (int) $app->config('app.cron.web_limit_default', 5) ); $deliveryStatusMappingRepository = new DeliveryStatusMappingRepository($app->db()); $deliveryStatusMappingController = new DeliveryStatusMappingController( $template, $translator, $auth, $deliveryStatusMappingRepository ); $companySettingsRepository = new CompanySettingsRepository($app->db()); $companySettingsController = new CompanySettingsController( $template, $translator, $auth, $companySettingsRepository ); $receiptConfigController = new ReceiptConfigController( $template, $translator, $auth, $receiptConfigRepository ); $emailMailboxRepository = new EmailMailboxRepository( $app->db(), new IntegrationSecretCipher((string) $app->config('app.integrations.secret', '')) ); $emailMailboxController = new EmailMailboxController( $template, $translator, $auth, $emailMailboxRepository ); $emailTemplateRepository = new EmailTemplateRepository($app->db()); $emailTemplateController = new EmailTemplateController( $template, $translator, $auth, $emailTemplateRepository, $emailMailboxRepository ); $automationRepository = new AutomationRepository($app->db()); $automationController = new AutomationController( $template, $translator, $auth, $automationRepository, $receiptConfigRepository ); $variableResolver = new VariableResolver(); $attachmentGenerator = new AttachmentGenerator($receiptRepository, $receiptConfigRepository, $template); $emailSendingService = new EmailSendingService( $app->db(), $app->orders(), $emailTemplateRepository, $emailMailboxRepository, $variableResolver, $attachmentGenerator ); $automationService = new AutomationService( $automationRepository, $emailSendingService, new OrdersRepository($app->db()), $companySettingsRepository, $receiptRepository, $receiptConfigRepository ); $printJobRepository = new PrintJobRepository($app->db()); $ordersController = new OrdersController($template, $translator, $auth, $app->orders(), $shipmentPackageRepositoryForOrders, $receiptRepository, $receiptConfigRepository, $emailSendingService, $emailTemplateRepository, $emailMailboxRepository, $app->basePath('storage'), $printJobRepository); $receiptController = new ReceiptController( $template, $translator, $auth, $receiptRepository, $receiptConfigRepository, $companySettingsRepository, new OrdersRepository($app->db()), $automationService ); $accountingController = new AccountingController( $template, $translator, $auth, $receiptRepository, $receiptConfigRepository ); $allegroApiClient = new AllegroApiClient(); $shipmentPackageRepository = new ShipmentPackageRepository($app->db()); $shipmentService = new AllegroShipmentService( $allegroTokenManager, $allegroApiClient, $shipmentPackageRepository, $companySettingsRepository, new OrdersRepository($app->db()) ); $apaczkaShipmentService = new ApaczkaShipmentService( $apaczkaIntegrationRepository, $apaczkaApiClient, $shipmentPackageRepository, $companySettingsRepository, new OrdersRepository($app->db()) ); $inpostShipmentService = new InpostShipmentService( $inpostIntegrationRepository, $shipmentPackageRepository, $companySettingsRepository, new OrdersRepository($app->db()) ); $shipmentProviderRegistry = new ShipmentProviderRegistry([ $shipmentService, $apaczkaShipmentService, $inpostShipmentService, ]); $shipmentController = new ShipmentController( $template, $translator, $auth, $app->orders(), $companySettingsRepository, $shipmentProviderRegistry, $shipmentPackageRepository, $app->basePath('storage'), $carrierDeliveryMappings, $printJobRepository ); $authMiddleware = new AuthMiddleware($auth); $router->get('/health', static fn (Request $request): Response => Response::json([ 'status' => 'ok', 'app' => (string) $app->config('app.name', 'orderPRO'), 'timestamp' => date(DATE_ATOM), ])); $router->get('/', static function (Request $request) use ($auth): Response { return $auth->check() ? Response::redirect('/settings/users') : Response::redirect('/login'); }); $router->get('/login', [$authController, 'showLogin']); $router->post('/login', [$authController, 'login']); $router->post('/logout', [$authController, 'logout'], [$authMiddleware]); $router->get('/users', static fn (Request $request): Response => Response::redirect('/settings/users'), [$authMiddleware]); $router->get('/orders', static fn (Request $request): Response => Response::redirect('/orders/list'), [$authMiddleware]); $router->get('/orders/list', [$ordersController, 'index'], [$authMiddleware]); $router->get('/orders/{id}', [$ordersController, 'show'], [$authMiddleware]); $router->post('/orders/{id}/status', [$ordersController, 'updateStatus'], [$authMiddleware]); $router->post('/orders/{id}/send-email', [$ordersController, 'sendEmail'], [$authMiddleware]); $router->post('/orders/{id}/email-preview', [$ordersController, 'emailPreview'], [$authMiddleware]); $router->post('/users', [$usersController, 'store'], [$authMiddleware]); $router->get('/settings/users', [$usersController, 'index'], [$authMiddleware]); $router->post('/settings/users', [$usersController, 'store'], [$authMiddleware]); $router->get('/settings', static fn (Request $request): Response => Response::redirect('/settings/users'), [$authMiddleware]); $router->get('/settings/database', [$settingsController, 'database'], [$authMiddleware]); $router->post('/settings/database/migrate', [$settingsController, 'migrate'], [$authMiddleware]); $router->get('/settings/statuses', [$settingsController, 'statuses'], [$authMiddleware]); $router->post('/settings/status-groups', [$settingsController, 'createStatusGroup'], [$authMiddleware]); $router->post('/settings/status-groups/update', [$settingsController, 'updateStatusGroup'], [$authMiddleware]); $router->post('/settings/status-groups/delete', [$settingsController, 'deleteStatusGroup'], [$authMiddleware]); $router->post('/settings/status-groups/reorder', [$settingsController, 'reorderStatusGroups'], [$authMiddleware]); $router->post('/settings/statuses/create', [$settingsController, 'createStatus'], [$authMiddleware]); $router->post('/settings/statuses/update', [$settingsController, 'updateStatus'], [$authMiddleware]); $router->post('/settings/statuses/delete', [$settingsController, 'deleteStatus'], [$authMiddleware]); $router->post('/settings/statuses/reorder', [$settingsController, 'reorderStatuses'], [$authMiddleware]); $router->get('/settings/cron', [$cronSettingsController, 'index'], [$authMiddleware]); $router->post('/settings/cron', [$cronSettingsController, 'save'], [$authMiddleware]); $router->get('/settings/integrations', [$integrationsHubController, 'index'], [$authMiddleware]); $router->get('/settings/integrations/allegro', [$allegroIntegrationController, 'index'], [$authMiddleware]); $router->post('/settings/integrations/allegro/save', [$allegroIntegrationController, 'save'], [$authMiddleware]); $router->post('/settings/integrations/allegro/settings/save', [$allegroIntegrationController, 'saveImportSettings'], [$authMiddleware]); $router->post('/settings/integrations/allegro/oauth/start', [$allegroIntegrationController, 'startOAuth'], [$authMiddleware]); $router->post('/settings/integrations/allegro/import-single', [$allegroIntegrationController, 'importSingleOrder'], [$authMiddleware]); $router->post('/settings/integrations/allegro/statuses/save', [$allegroStatusMappingController, 'saveStatusMapping'], [$authMiddleware]); $router->post('/settings/integrations/allegro/statuses/save-bulk', [$allegroStatusMappingController, 'saveStatusMappingsBulk'], [$authMiddleware]); $router->post('/settings/integrations/allegro/statuses/delete', [$allegroStatusMappingController, 'deleteStatusMapping'], [$authMiddleware]); $router->post('/settings/integrations/allegro/statuses/sync', [$allegroStatusMappingController, 'syncStatusesFromAllegro'], [$authMiddleware]); $router->post('/settings/integrations/allegro/delivery/save', [$allegroDeliveryMappingController, 'saveDeliveryMappings'], [$authMiddleware]); $router->get('/settings/integrations/allegro/oauth/callback', [$allegroIntegrationController, 'oauthCallback']); $router->get('/settings/integrations/apaczka', [$apaczkaIntegrationController, 'index'], [$authMiddleware]); $router->post('/settings/integrations/apaczka/save', [$apaczkaIntegrationController, 'save'], [$authMiddleware]); $router->post('/settings/integrations/apaczka/test', [$apaczkaIntegrationController, 'test'], [$authMiddleware]); $router->get('/settings/integrations/inpost', [$inpostIntegrationController, 'index'], [$authMiddleware]); $router->post('/settings/integrations/inpost/save', [$inpostIntegrationController, 'save'], [$authMiddleware]); $router->get('/settings/integrations/shoppro', [$shopproIntegrationsController, 'index'], [$authMiddleware]); $router->post('/settings/integrations/shoppro/save', [$shopproIntegrationsController, 'save'], [$authMiddleware]); $router->post('/settings/integrations/shoppro/test', [$shopproIntegrationsController, 'test'], [$authMiddleware]); $router->post('/settings/integrations/shoppro/statuses/save', [$shopproIntegrationsController, 'saveStatusMappings'], [$authMiddleware]); $router->post('/settings/integrations/shoppro/statuses/sync', [$shopproIntegrationsController, 'syncStatuses'], [$authMiddleware]); $router->post('/settings/integrations/shoppro/delivery/save', [$shopproIntegrationsController, 'saveDeliveryMappings'], [$authMiddleware]); $router->get('/settings/company', [$companySettingsController, 'index'], [$authMiddleware]); $router->post('/settings/company/save', [$companySettingsController, 'save'], [$authMiddleware]); $router->get('/settings/accounting', [$receiptConfigController, 'index'], [$authMiddleware]); $router->post('/settings/accounting/save', [$receiptConfigController, 'save'], [$authMiddleware]); $router->post('/settings/accounting/toggle', [$receiptConfigController, 'toggleStatus'], [$authMiddleware]); $router->post('/settings/accounting/delete', [$receiptConfigController, 'delete'], [$authMiddleware]); $router->get('/settings/email-mailboxes', [$emailMailboxController, 'index'], [$authMiddleware]); $router->post('/settings/email-mailboxes/save', [$emailMailboxController, 'save'], [$authMiddleware]); $router->post('/settings/email-mailboxes/delete', [$emailMailboxController, 'delete'], [$authMiddleware]); $router->post('/settings/email-mailboxes/toggle', [$emailMailboxController, 'toggleStatus'], [$authMiddleware]); $router->post('/settings/email-mailboxes/test', [$emailMailboxController, 'testConnection'], [$authMiddleware]); $router->get('/settings/email-templates', [$emailTemplateController, 'index'], [$authMiddleware]); $router->post('/settings/email-templates/save', [$emailTemplateController, 'save'], [$authMiddleware]); $router->post('/settings/email-templates/delete', [$emailTemplateController, 'delete'], [$authMiddleware]); $router->post('/settings/email-templates/duplicate', [$emailTemplateController, 'duplicate'], [$authMiddleware]); $router->post('/settings/email-templates/toggle', [$emailTemplateController, 'toggleStatus'], [$authMiddleware]); $router->post('/settings/email-templates/preview', [$emailTemplateController, 'preview'], [$authMiddleware]); $router->get('/settings/email-templates/variables', [$emailTemplateController, 'getVariables'], [$authMiddleware]); $router->get('/settings/automation', [$automationController, 'index'], [$authMiddleware]); $router->get('/settings/automation/create', [$automationController, 'create'], [$authMiddleware]); $router->post('/settings/automation/store', [$automationController, 'store'], [$authMiddleware]); $router->get('/settings/automation/edit', [$automationController, 'edit'], [$authMiddleware]); $router->post('/settings/automation/update', [$automationController, 'update'], [$authMiddleware]); $router->post('/settings/automation/delete', [$automationController, 'destroy'], [$authMiddleware]); $router->post('/settings/automation/duplicate', [$automationController, 'duplicate'], [$authMiddleware]); $router->post('/settings/automation/toggle', [$automationController, 'toggleStatus'], [$authMiddleware]); $router->get('/settings/delivery-status-mappings', [$deliveryStatusMappingController, 'index'], [$authMiddleware]); $router->post('/settings/delivery-status-mappings/save', [$deliveryStatusMappingController, 'save'], [$authMiddleware]); $router->post('/settings/delivery-status-mappings/save-bulk', [$deliveryStatusMappingController, 'saveBulk'], [$authMiddleware]); $router->post('/settings/delivery-status-mappings/reset', [$deliveryStatusMappingController, 'reset'], [$authMiddleware]); $router->post('/settings/delivery-status-mappings/reset-all', [$deliveryStatusMappingController, 'resetAll'], [$authMiddleware]); $router->get('/accounting', [$accountingController, 'index'], [$authMiddleware]); $router->post('/accounting/export', [$accountingController, 'export'], [$authMiddleware]); $router->get('/orders/{id}/receipt/create', [$receiptController, 'create'], [$authMiddleware]); $router->post('/orders/{id}/receipt/store', [$receiptController, 'store'], [$authMiddleware]); $router->get('/orders/{id}/receipt/{receiptId}', [$receiptController, 'show'], [$authMiddleware]); $router->get('/orders/{id}/receipt/{receiptId}/print', [$receiptController, 'printView'], [$authMiddleware]); $router->get('/orders/{id}/receipt/{receiptId}/pdf', [$receiptController, 'pdf'], [$authMiddleware]); $router->get('/orders/{id}/shipment/prepare', [$shipmentController, 'prepare'], [$authMiddleware]); $router->post('/orders/{id}/shipment/create', [$shipmentController, 'create'], [$authMiddleware]); $router->get('/orders/{id}/shipment/{packageId}/status', [$shipmentController, 'checkStatus'], [$authMiddleware]); $router->post('/orders/{id}/shipment/{packageId}/label', [$shipmentController, 'label'], [$authMiddleware]); $router->post('/orders/{id}/shipment/manual', [$shipmentController, 'createManual'], [$authMiddleware]); // --- Printing module --- $printApiKeyRepository = new PrintApiKeyRepository($app->db()); $apiKeyMiddleware = new ApiKeyMiddleware($printApiKeyRepository); $printApiController = new PrintApiController( $printJobRepository, $shipmentPackageRepository, $auth, $app->basePath('storage'), $shipmentProviderRegistry ); $printSettingsController = new PrintSettingsController($template, $translator, $auth, $printApiKeyRepository, $printJobRepository); // Print API — session auth (from orderPRO UI) $router->post('/api/print/jobs', [$printApiController, 'createJob'], [$authMiddleware]); // Print API — API key auth (from Windows client) $router->get('/api/print/jobs/pending', [$printApiController, 'listPending'], [$apiKeyMiddleware]); $router->get('/api/print/jobs/{id}/download', [$printApiController, 'downloadLabel'], [$apiKeyMiddleware]); $router->post('/api/print/jobs/{id}/complete', [$printApiController, 'markComplete'], [$apiKeyMiddleware]); // Print settings $router->get('/settings/printing', [$printSettingsController, 'index'], [$authMiddleware]); $router->post('/settings/printing/keys/create', [$printSettingsController, 'createKey'], [$authMiddleware]); $router->post('/settings/printing/keys/{id}/delete', [$printSettingsController, 'deleteKey'], [$authMiddleware]); $router->post('/settings/printing/jobs/delete', [$printSettingsController, 'deleteJob'], [$authMiddleware]); // Shipment presets API $presetRepository = new ShipmentPresetRepository($app->db()); $presetController = new ShipmentPresetController($presetRepository); $router->get('/api/shipment-presets', [$presetController, 'list'], [$authMiddleware]); $router->post('/api/shipment-presets', [$presetController, 'store'], [$authMiddleware]); $router->post('/api/shipment-presets/update', [$presetController, 'update'], [$authMiddleware]); $router->post('/api/shipment-presets/delete', [$presetController, 'destroy'], [$authMiddleware]); };