feat: add email settings management

- Introduced EmailSettings component for managing SMTP services.
- Added API endpoints for organization email services including CRUD operations.
- Created database migrations for organization_email_settings and organization_email_services tables.
- Updated the settings page to include EmailSettings component.
- Implemented validation and error handling for email service operations.
This commit is contained in:
2026-04-15 09:33:50 -04:00
parent 44facf7f4a
commit e1d5975e57
12 changed files with 1877 additions and 18 deletions
@@ -0,0 +1,58 @@
CREATE TABLE IF NOT EXISTS organization_email_services (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
organization_id UUID NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
service_type TEXT NOT NULL DEFAULT 'smtp',
provider_key TEXT NOT NULL DEFAULT 'custom',
display_name TEXT NOT NULL DEFAULT 'SMTP principal',
is_enabled BOOLEAN NOT NULL DEFAULT TRUE,
is_default BOOLEAN NOT NULL DEFAULT FALSE,
smtp_host TEXT,
smtp_port INTEGER NOT NULL DEFAULT 587,
smtp_from TEXT,
smtp_username TEXT,
smtp_password TEXT,
smtp_starttls BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_org_email_services_org_id ON organization_email_services(organization_id);
CREATE UNIQUE INDEX IF NOT EXISTS uq_org_email_services_default_per_org
ON organization_email_services(organization_id)
WHERE is_default = TRUE;
INSERT INTO organization_email_services (
organization_id,
service_type,
provider_key,
display_name,
is_enabled,
is_default,
smtp_host,
smtp_port,
smtp_from,
smtp_username,
smtp_password,
smtp_starttls,
created_at,
updated_at
)
SELECT
s.organization_id,
'smtp',
'custom',
'SMTP principal',
s.smtp_enabled,
TRUE,
s.smtp_host,
s.smtp_port,
s.smtp_from,
s.smtp_username,
s.smtp_password,
s.smtp_starttls,
NOW(),
NOW()
FROM organization_email_settings s
LEFT JOIN organization_email_services es
ON es.organization_id = s.organization_id
WHERE es.id IS NULL;