-- Migration: Create tickets table for support system -- Description: Stores support tickets from users/companies CREATE TABLE IF NOT EXISTS tickets ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id) ON DELETE SET NULL, company_id INT REFERENCES companies(id) ON DELETE SET NULL, -- Ticket Info subject VARCHAR(255) NOT NULL, description TEXT NOT NULL, category VARCHAR(50) DEFAULT 'general' CHECK (category IN ('general', 'billing', 'technical', 'feature_request', 'bug_report', 'account')), priority VARCHAR(20) DEFAULT 'medium' CHECK (priority IN ('low', 'medium', 'high', 'urgent')), status VARCHAR(20) DEFAULT 'open' CHECK (status IN ('open', 'in_progress', 'waiting_response', 'resolved', 'closed')), -- Assignment assigned_to INT REFERENCES users(id) ON DELETE SET NULL, -- Metadata created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, resolved_at TIMESTAMP ); -- Ticket messages/replies CREATE TABLE IF NOT EXISTS ticket_messages ( id SERIAL PRIMARY KEY, ticket_id INT NOT NULL REFERENCES tickets(id) ON DELETE CASCADE, user_id INT REFERENCES users(id) ON DELETE SET NULL, message TEXT NOT NULL, is_internal BOOLEAN DEFAULT false, -- Internal notes not visible to user created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Indexes CREATE INDEX idx_tickets_user ON tickets(user_id); CREATE INDEX idx_tickets_company ON tickets(company_id); CREATE INDEX idx_tickets_status ON tickets(status); CREATE INDEX idx_tickets_priority ON tickets(priority); CREATE INDEX idx_tickets_assigned ON tickets(assigned_to); CREATE INDEX idx_ticket_messages_ticket ON ticket_messages(ticket_id); COMMENT ON TABLE tickets IS 'Support tickets from users and companies'; COMMENT ON TABLE ticket_messages IS 'Messages/replies within a support ticket';