Backend: - Password reset flow (forgot/reset endpoints, tokens table) - Profile management (PUT /users/me, skills, experience, education) - Tickets system (CRUD, messages, stats) - Activity logs (list, stats) - Document validator (CNPJ, CPF, EIN support) - Input sanitizer (XSS prevention) - Full-text search em vagas (plainto_tsquery) - Filtros avançados (location, salary, workMode) - Ordenação (date, salary, relevance) Frontend: - Forgot/Reset password pages - Candidate profile edit page - Sanitize utilities (sanitize.ts) Backoffice: - TicketsModule proxy - ActivityLogsModule proxy - Dockerfile otimizado (multi-stage, non-root, healthcheck) Migrations: - 013: Profile fields to users - 014: Password reset tokens - 015: Tickets table - 016: Activity logs table
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';
|