-- 031_candidate_city_reapplied.sql -- City of residence (employment-agent extraction) on the four candidate -- surfaces, plus a denormalised reapplied JSONB list of prior job_post_ids -- on users / manual_upload_candidate / form_data. -- -- form_data already has residing_city from the sheet; city is a separate -- column so inbox / users / bank share one name. Existing sheet values are -- copied across. Applied at startup by alembic_setup.run_manual_sql(). ALTER TABLE app.users ADD COLUMN IF NOT EXISTS city TEXT, ADD COLUMN IF NOT EXISTS reapplied JSONB NOT NULL DEFAULT '[]'::jsonb; ALTER TABLE app.manual_upload_candidate ADD COLUMN IF NOT EXISTS city TEXT, ADD COLUMN IF NOT EXISTS reapplied JSONB NOT NULL DEFAULT '[]'::jsonb; ALTER TABLE app.form_data ADD COLUMN IF NOT EXISTS city TEXT, ADD COLUMN IF NOT EXISTS reapplied JSONB NOT NULL DEFAULT '[]'::jsonb; ALTER TABLE app.inbox_messages ADD COLUMN IF NOT EXISTS city TEXT; UPDATE app.form_data SET city = residing_city WHERE city IS NULL AND COALESCE(TRIM(residing_city), '') <> ''; CREATE INDEX IF NOT EXISTS ix_users_city ON app.users (city); CREATE INDEX IF NOT EXISTS ix_manual_upload_candidate_city ON app.manual_upload_candidate (city); CREATE INDEX IF NOT EXISTS ix_form_data_city ON app.form_data (city); CREATE INDEX IF NOT EXISTS ix_inbox_messages_city ON app.inbox_messages (city);