Refactor: Abstract out common codes for create, so it will be easier to override