move idempotent to separate migration
fix upsert to include id