canUpdateMilestone = $canUpdateMilestone; $this->updatesMilestone = $updatesMilestone; $this->fetchesMilestone = $fetchesMilestone; } /** * @param Request $request * @return Model * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function execute(Request $request): Model { $milestoneObject = new MilestoneObject( $request->input('id'), $request->input('name'), $request->input('description') ); $this->canUpdateMilestone->passes($milestoneObject); $milestone = $this->fetchesMilestone->execute(['id' => $request->route('id')]); return $this->updatesMilestone->execute($milestone, $milestoneObject); } }