Nice write up, Vikram!
I’m curious to learn the difference between Multi.insert/2 and Multi.run/2? You use the Multi.insert/2 on the user — but Repo.insert/1 on the address? Could it not be a Multi.insert/2 on the address as well?
The question does give me away as being a total noob with Ecto (and Elixir/Phoenix) — sorry!