44 lines
1.8 KiB
SQL
44 lines
1.8 KiB
SQL
-- 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';
|