Readur/migrations/20250620100008_add_webdav_f...

51 lines
2.3 KiB
SQL

-- Add WebDAV configuration fields to settings table
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_enabled BOOLEAN DEFAULT FALSE;
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_server_url TEXT;
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_username TEXT;
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_password TEXT;
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_watch_folders TEXT[] DEFAULT ARRAY['/Documents']::TEXT[];
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_file_extensions TEXT[] DEFAULT ARRAY['pdf', 'png', 'jpg', 'jpeg', 'tiff', 'bmp', 'txt']::TEXT[];
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_auto_sync BOOLEAN DEFAULT FALSE;
ALTER TABLE settings ADD COLUMN IF NOT EXISTS webdav_sync_interval_minutes INTEGER DEFAULT 60;
-- Create table for WebDAV sync state tracking
CREATE TABLE IF NOT EXISTS webdav_sync_state (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
last_sync_at TIMESTAMPTZ,
sync_cursor TEXT,
is_running BOOLEAN DEFAULT FALSE,
files_processed BIGINT DEFAULT 0,
files_remaining BIGINT DEFAULT 0,
current_folder TEXT,
errors TEXT[] DEFAULT ARRAY[]::TEXT[],
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(user_id)
);
-- Create table for tracking WebDAV files
CREATE TABLE IF NOT EXISTS webdav_files (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
webdav_path TEXT NOT NULL,
etag TEXT NOT NULL,
last_modified TIMESTAMPTZ,
file_size BIGINT,
mime_type TEXT,
document_id UUID REFERENCES documents(id) ON DELETE SET NULL,
sync_status TEXT DEFAULT 'pending', -- pending, processing, completed, failed
sync_error TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(user_id, webdav_path)
);
-- Create indexes for performance
CREATE INDEX IF NOT EXISTS idx_webdav_files_user_id ON webdav_files(user_id);
CREATE INDEX IF NOT EXISTS idx_webdav_files_sync_status ON webdav_files(sync_status);
CREATE INDEX IF NOT EXISTS idx_webdav_files_etag ON webdav_files(etag);
CREATE INDEX IF NOT EXISTS idx_webdav_sync_state_user_id ON webdav_sync_state(user_id);