ALTER TABLE community.image ADD COLUMN IF NOT EXISTS is_moderated_hidden BOOLEAN NOT NULL DEFAULT FALSE; ALTER TABLE community.erotic_video ADD COLUMN IF NOT EXISTS is_moderated_hidden BOOLEAN NOT NULL DEFAULT FALSE; CREATE TABLE IF NOT EXISTS community.erotic_content_report ( id SERIAL PRIMARY KEY, reporter_id INTEGER NOT NULL REFERENCES community."user"(id) ON DELETE CASCADE, target_type VARCHAR(20) NOT NULL, target_id INTEGER NOT NULL, reason VARCHAR(80) NOT NULL, note TEXT NULL, status VARCHAR(20) NOT NULL DEFAULT 'open', action_taken VARCHAR(40) NULL, handled_by INTEGER NULL REFERENCES community."user"(id) ON DELETE SET NULL, handled_at TIMESTAMP WITH TIME ZONE NULL, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS erotic_content_report_status_idx ON community.erotic_content_report (status, created_at DESC); CREATE INDEX IF NOT EXISTS erotic_content_report_target_idx ON community.erotic_content_report (target_type, target_id); INSERT INTO type.user_param (description, datatype, settings_id, order_id, min_age) SELECT 'adult_upload_blocked', 'bool', st.id, 999, 18 FROM type.settings st WHERE st.name = 'account' AND NOT EXISTS ( SELECT 1 FROM type.user_param upt WHERE upt.description = 'adult_upload_blocked' );