feat(13-email-mailboxes): phase 13 complete — email DB foundation + SMTP mailbox CRUD

3 migrations (email_mailboxes, email_templates, email_logs), full CRUD
for SMTP mailboxes with encrypted passwords (IntegrationSecretCipher),
native SMTP connection test via stream_socket_client, sidebar navigation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 23:57:33 +01:00
parent 8b3fb3fd0b
commit 3223aac4d9
16 changed files with 1257 additions and 19 deletions

View File

@@ -36,6 +36,9 @@ use App\Modules\Settings\CompanySettingsController;
use App\Modules\Settings\CompanySettingsRepository;
use App\Modules\Settings\ReceiptConfigController;
use App\Modules\Settings\ReceiptConfigRepository;
use App\Modules\Settings\EmailMailboxController;
use App\Modules\Settings\EmailMailboxRepository;
use App\Modules\Settings\IntegrationSecretCipher;
use App\Modules\Accounting\AccountingController;
use App\Modules\Accounting\ReceiptController;
use App\Modules\Accounting\ReceiptRepository;
@@ -184,6 +187,16 @@ return static function (Application $app): void {
$auth,
$receiptConfigRepository
);
$emailMailboxRepository = new EmailMailboxRepository(
$app->db(),
new IntegrationSecretCipher((string) $app->config('app.integrations.secret', ''))
);
$emailMailboxController = new EmailMailboxController(
$template,
$translator,
$auth,
$emailMailboxRepository
);
$receiptController = new ReceiptController(
$template,
$translator,
@@ -307,6 +320,11 @@ return static function (Application $app): void {
$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('/accounting', [$accountingController, 'index'], [$authMiddleware]);
$router->post('/accounting/export', [$accountingController, 'export'], [$authMiddleware]);
$router->get('/orders/{id}/receipt/create', [$receiptController, 'create'], [$authMiddleware]);