CREATE TABLE users ( id SERIAL PRIMARY KEY, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'user', quota BIGINT DEFAULT 104857600 -- 100 MB default ); CREATE TABLE files ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, original_name TEXT NOT NULL, storage_path TEXT NOT NULL, uploaded_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), size BIGINT NOT NULL ); CREATE TABLE shares ( id UUID PRIMARY KEY, file_id INTEGER REFERENCES files(id) ON DELETE CASCADE, shared_by INTEGER REFERENCES users(id) ON DELETE SET NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), expires_at TIMESTAMPTZ );