91 lines
3.7 KiB
PL/PgSQL
91 lines
3.7 KiB
PL/PgSQL
-- Create document sessions table for OnlyOffice integration
|
|
CREATE TABLE IF NOT EXISTS document_sessions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
document_id UUID NOT NULL,
|
|
document_key VARCHAR(255) UNIQUE NOT NULL,
|
|
user_id UUID NOT NULL REFERENCES users(id),
|
|
status INTEGER NOT NULL DEFAULT 0,
|
|
is_locked BOOLEAN DEFAULT false,
|
|
locked_by UUID REFERENCES users(id),
|
|
locked_at TIMESTAMP WITHOUT TIME ZONE,
|
|
last_saved_at TIMESTAMP WITHOUT TIME ZONE,
|
|
version INTEGER NOT NULL DEFAULT 1,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes for document sessions
|
|
CREATE INDEX idx_document_sessions_document ON document_sessions(document_id);
|
|
CREATE INDEX idx_document_sessions_user ON document_sessions(user_id);
|
|
CREATE INDEX idx_document_sessions_status ON document_sessions(status);
|
|
CREATE INDEX idx_document_sessions_locked ON document_sessions(is_locked);
|
|
|
|
-- Create document versions table
|
|
CREATE TABLE IF NOT EXISTS document_versions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
document_id UUID NOT NULL,
|
|
version INTEGER NOT NULL,
|
|
file_url TEXT NOT NULL,
|
|
file_size BIGINT NOT NULL,
|
|
changes_url TEXT,
|
|
saved_by UUID NOT NULL REFERENCES users(id),
|
|
saved_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
is_active BOOLEAN DEFAULT false,
|
|
comments TEXT,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes for document versions
|
|
CREATE INDEX idx_document_versions_document ON document_versions(document_id);
|
|
CREATE INDEX idx_document_versions_active ON document_versions(is_active);
|
|
CREATE UNIQUE INDEX idx_document_versions_active_unique ON document_versions(document_id, is_active) WHERE is_active = true;
|
|
|
|
-- Create document metadata table
|
|
CREATE TABLE IF NOT EXISTS document_metadata (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
document_id UUID UNIQUE NOT NULL,
|
|
document_type VARCHAR(50) NOT NULL,
|
|
reference_id UUID NOT NULL,
|
|
file_name TEXT NOT NULL,
|
|
file_type VARCHAR(50) NOT NULL,
|
|
file_size BIGINT NOT NULL,
|
|
mime_type VARCHAR(255),
|
|
created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes for document metadata
|
|
CREATE INDEX idx_document_metadata_document ON document_metadata(document_id);
|
|
CREATE INDEX idx_document_metadata_type ON document_metadata(document_type);
|
|
CREATE INDEX idx_document_metadata_reference ON document_metadata(reference_id);
|
|
|
|
-- Create document errors table for logging
|
|
CREATE TABLE IF NOT EXISTS document_errors (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
document_id UUID NOT NULL,
|
|
session_id UUID REFERENCES document_sessions(id),
|
|
error_type VARCHAR(100) NOT NULL,
|
|
error_msg TEXT NOT NULL,
|
|
details JSONB,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes for document errors
|
|
CREATE INDEX idx_document_errors_document ON document_errors(document_id);
|
|
CREATE INDEX idx_document_errors_session ON document_errors(session_id);
|
|
CREATE INDEX idx_document_errors_type ON document_errors(error_type);
|
|
|
|
-- Add trigger to update updated_at timestamp
|
|
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
CREATE TRIGGER update_document_sessions_updated_at BEFORE UPDATE ON document_sessions
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
CREATE TRIGGER update_document_metadata_updated_at BEFORE UPDATE ON document_metadata
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); |