37 lines
1.6 KiB
MySQL
37 lines
1.6 KiB
MySQL
|
|
-- Migration 009: Contact Messages and Newsletter Subscribers
|
||
|
|
-- Description: Tables for contact form submissions and newsletter subscriptions (non-customer)
|
||
|
|
|
||
|
|
-- Contact Messages Table
|
||
|
|
CREATE TABLE IF NOT EXISTS contact_messages (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
name VARCHAR(255) NOT NULL,
|
||
|
|
email VARCHAR(255) NOT NULL,
|
||
|
|
subject VARCHAR(500) NOT NULL,
|
||
|
|
message TEXT NOT NULL,
|
||
|
|
is_read BOOLEAN DEFAULT FALSE,
|
||
|
|
is_archived BOOLEAN DEFAULT FALSE,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
read_at TIMESTAMP WITH TIME ZONE,
|
||
|
|
replied_at TIMESTAMP WITH TIME ZONE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Newsletter Subscribers Table (for non-registered users)
|
||
|
|
CREATE TABLE IF NOT EXISTS newsletter_subscribers (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
||
|
|
is_active BOOLEAN DEFAULT TRUE,
|
||
|
|
subscribed_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
unsubscribed_at TIMESTAMP WITH TIME ZONE,
|
||
|
|
source VARCHAR(50) DEFAULT 'website' -- 'website', 'blog', 'home', 'footer'
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_contact_messages_created ON contact_messages(created_at DESC);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_contact_messages_unread ON contact_messages(is_read) WHERE is_read = FALSE;
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_newsletter_subscribers_active ON newsletter_subscribers(is_active) WHERE is_active = TRUE;
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_newsletter_subscribers_email ON newsletter_subscribers(email);
|
||
|
|
|
||
|
|
-- Comments
|
||
|
|
COMMENT ON TABLE contact_messages IS 'Contact form submissions from the website';
|
||
|
|
COMMENT ON TABLE newsletter_subscribers IS 'Newsletter subscribers who are not registered customers';
|