04-smtp-settings.sql 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. -- SMTP Configuration Table
  2. CREATE TABLE IF NOT EXISTS __sys_smtp_settings (
  3. id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  4. host VARCHAR(255) NOT NULL,
  5. port INTEGER NOT NULL DEFAULT 587,
  6. secure BOOLEAN DEFAULT false,
  7. username VARCHAR(255),
  8. password VARCHAR(255),
  9. from_email VARCHAR(255) NOT NULL,
  10. from_name VARCHAR(255) DEFAULT 'SaaS Platform',
  11. enabled BOOLEAN DEFAULT true,
  12. created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  13. updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
  14. );
  15. -- Create index on enabled field
  16. CREATE INDEX IF NOT EXISTS idx_smtp_settings_enabled ON __sys_smtp_settings(enabled);
  17. -- Insert default SMTP settings (disabled by default)
  18. INSERT INTO __sys_smtp_settings (
  19. host,
  20. port,
  21. secure,
  22. from_email,
  23. from_name,
  24. enabled
  25. ) VALUES (
  26. 'smtp.example.com',
  27. 587,
  28. false,
  29. 'noreply@example.com',
  30. 'SaaS Platform',
  31. false
  32. ) ON CONFLICT DO NOTHING;
  33. -- Email Queue Table (for asynchronous email sending)
  34. CREATE TABLE IF NOT EXISTS __sys_email_queue (
  35. id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  36. to_email VARCHAR(255) NOT NULL,
  37. subject VARCHAR(500) NOT NULL,
  38. body TEXT NOT NULL,
  39. html_body TEXT,
  40. status VARCHAR(50) DEFAULT 'pending',
  41. attempts INTEGER DEFAULT 0,
  42. max_attempts INTEGER DEFAULT 3,
  43. error_message TEXT,
  44. scheduled_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  45. sent_at TIMESTAMP WITH TIME ZONE,
  46. created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  47. updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
  48. );
  49. -- Create indexes on email queue
  50. CREATE INDEX IF NOT EXISTS idx_email_queue_status ON __sys_email_queue(status);
  51. CREATE INDEX IF NOT EXISTS idx_email_queue_scheduled ON __sys_email_queue(scheduled_at);
  52. CREATE INDEX IF NOT EXISTS idx_email_queue_to_email ON __sys_email_queue(to_email);
  53. -- Trigger to update updated_at timestamp
  54. CREATE OR REPLACE FUNCTION update_smtp_settings_updated_at()
  55. RETURNS TRIGGER AS $$
  56. BEGIN
  57. NEW.updated_at = CURRENT_TIMESTAMP;
  58. RETURN NEW;
  59. END;
  60. $$ LANGUAGE plpgsql;
  61. CREATE TRIGGER smtp_settings_updated_at_trigger
  62. BEFORE UPDATE ON __sys_smtp_settings
  63. FOR EACH ROW
  64. EXECUTE FUNCTION update_smtp_settings_updated_at();
  65. CREATE TRIGGER email_queue_updated_at_trigger
  66. BEFORE UPDATE ON __sys_email_queue
  67. FOR EACH ROW
  68. EXECUTE FUNCTION update_smtp_settings_updated_at();