-- Add directory support to files table -- Migration: Add directory support for folder uploads -- Add new columns to files table ALTER TABLE files ADD COLUMN IF NOT EXISTS is_directory BOOLEAN DEFAULT FALSE, ADD COLUMN IF NOT EXISTS parent_directory_id UUID REFERENCES files(id) ON DELETE CASCADE, ADD COLUMN IF NOT EXISTS relative_path TEXT, ADD COLUMN IF NOT EXISTS directory_manifest JSONB, ADD COLUMN IF NOT EXISTS upload_session_id UUID, ADD COLUMN IF NOT EXISTS processing_status TEXT DEFAULT 'uploaded' CHECK (processing_status IN ('uploaded', 'processing', 'completed', 'failed', 'queued')); -- Create index for efficient directory queries CREATE INDEX IF NOT EXISTS idx_files_parent_directory ON files(parent_directory_id); CREATE INDEX IF NOT EXISTS idx_files_upload_session ON files(upload_session_id); CREATE INDEX IF NOT EXISTS idx_files_processing_status ON files(processing_status); CREATE INDEX IF NOT EXISTS idx_files_is_directory ON files(is_directory); -- Create directory manifest structure COMMENT ON COLUMN files.is_directory IS 'True if this record represents a directory/folder'; COMMENT ON COLUMN files.parent_directory_id IS 'ID of parent directory if this file is inside an uploaded folder'; COMMENT ON COLUMN files.relative_path IS 'Relative path within the uploaded directory structure'; COMMENT ON COLUMN files.directory_manifest IS 'JSON manifest of directory contents including file count, total size, structure'; COMMENT ON COLUMN files.upload_session_id IS 'Groups files uploaded together in a single directory upload session'; COMMENT ON COLUMN files.processing_status IS 'Simple status tracking without auto-processing'; -- Example directory_manifest structure: -- { -- "total_files": 15, -- "total_size_bytes": 12345678, -- "directory_structure": { -- "documents/": { -- "file1.pdf": {"size": 123456, "mime_type": "application/pdf"}, -- "subdirectory/": { -- "file2.docx": {"size": 234567, "mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"} -- } -- } -- }, -- "upload_timestamp": "2024-09-23T12:00:00Z", -- "upload_method": "directory_picker" -- }