Observer

use findAndModify and look really good the method signature. You will avoid invoking getAmount() +1 query to DB