39 lines
1.4 KiB
PL/PgSQL
39 lines
1.4 KiB
PL/PgSQL
-- Migration: Add document version history support
|
|
-- Run: psql -U postgres collaboration < backend/scripts/migration_add_versions.sql
|
|
|
|
CREATE TABLE IF NOT EXISTS document_versions (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
document_id UUID NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
|
|
yjs_snapshot BYTEA NOT NULL,
|
|
text_preview TEXT,
|
|
version_number INTEGER NOT NULL,
|
|
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
version_label TEXT,
|
|
is_auto_generated BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
|
|
CONSTRAINT unique_document_version UNIQUE(document_id, version_number)
|
|
);
|
|
|
|
CREATE INDEX idx_document_versions_document_id ON document_versions(document_id, created_at DESC);
|
|
CREATE INDEX idx_document_versions_created_by ON document_versions(created_by);
|
|
|
|
-- Add version tracking to documents table
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS version_count INTEGER DEFAULT 0;
|
|
ALTER TABLE documents ADD COLUMN IF NOT EXISTS last_snapshot_at TIMESTAMPTZ;
|
|
|
|
-- Function to get next version number
|
|
CREATE OR REPLACE FUNCTION get_next_version_number(p_document_id UUID)
|
|
RETURNS INTEGER AS $$
|
|
DECLARE
|
|
next_version INTEGER;
|
|
BEGIN
|
|
SELECT COALESCE(MAX(version_number), 0) + 1
|
|
INTO next_version
|
|
FROM document_versions
|
|
WHERE document_id = p_document_id;
|
|
|
|
RETURN next_version;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|