Return errors in controllers instead of using panic/recover