extractAdditionalData($data); return $this->processPostData($data); } protected function extractAdditionalData(array &$data): void { $this->publicationAgreements = $data['publication'] ?? []; $this->slideData = $data['slide'] ?? []; unset($data['slide'], $data['publication']); } protected function processPostData(array $data): array { return (new PostDataProcessor())->process($data); } protected function afterCreate(): void { $this->handleSlides(); $this->generateSeo(); $this->sendNotifications(); $this->publishToVk(); } protected function handleSlides(): void { if (empty($this->slideData)) { return; } $this->slideData['is_active'] = $this->record->status === PostStatus::PUBLISHED; $this->slideData['start_time'] = $this->record->publish_at; $sliderDTO = MainSliderDTO::fromArray($this->slideData); (new PostSliderService($sliderDTO, $this->record))->create(); } protected function generateSeo(): void { $seoData = (new PostSeoGenerator())->generate([ 'title' => $this->record->title, 'content' => $this->record->content, 'preview' => $this->record->preview, ]); $this->record->seo()->create($seoData); } protected function sendNotifications(): void { (new PostNotificationService())->send($this->record); } protected function publishToVk(): void { (new VkPostPublisher())->publish($this->publicationAgreements, $this->record); } }