canAssignSegment = $canAssignSegment; $this->assignsAnnouncementToSegment = $assignsAnnouncementToSegment; $this->fetchesSegment = $fetchesSegment; } /** * @param Announcement $announcement * @param int|null $segmentId * @return Model * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function execute(Announcement $announcement, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model { $this->canAssignSegment->passes(); $segment = $this->fetchesSegment->execute(['id' => $segmentId]); return $this->assignsAnnouncementToSegment->execute($announcement, $segment); } }