Migrate backend to Porto architecture and fix minor bugs

- Fully transitioned the backend to the Porto architectural pattern
- Improved code organization and maintainability
- Fixed minor bugs and inconsistencies
This commit is contained in:
F4ilji
2025-05-12 08:47:43 +05:00
parent 76deaf75f3
commit c01016a154
620 changed files with 16218 additions and 6073 deletions
@@ -2,7 +2,7 @@
namespace App\Services\Filament\Domain\Posts;
use App\Enums\PostStatus;
use App\Containers\Article\Enums\PostStatus;
use Illuminate\Support\Carbon;
use Illuminate\Support\Str;
@@ -14,7 +14,7 @@ class PostDataProcessor
* @param array $data
* @return array
*/
public function process(array $data, $operation): array
public function processCreate(array $data): array
{
// Удаляем ненужные данные
unset($data['publication']);
@@ -22,15 +22,15 @@ class PostDataProcessor
// Устанавливаем текст для предпросмотра
$data['preview_text'] = $this->setPreviewText($data);
if (($data['status'] === PostStatus::PUBLISHED->value)) {
$data['publish_at'] = $this->setPublishDateTime();
}
// Устанавливаем время публикации
if ($data['publish_setting']['publish_after'] === true) {
$data['publish_at'] = $this->setPublishDateTimeInFuture($data['publish_setting']);
}
if (($data['status'] === PostStatus::PUBLISHED->value || PostStatus::PUBLISHED) && $operation === 'create') {
$data['publish_at'] = $this->setPublishDateTime();
}
unset($data['publish_setting']);
// Генерируем данные для поиска
@@ -46,6 +46,36 @@ class PostDataProcessor
return $data;
}
public function processUpdate(array $data): array
{
// Удаляем ненужные данные
unset($data['publication']);
// Устанавливаем текст для предпросмотра
$data['preview_text'] = $this->setPreviewText($data);
if (!$data['publish_at'] && ($data['status'] === PostStatus::PUBLISHED->value)) {
$data['publish_at'] = $this->setPublishDateTime();
}
// Устанавливаем время публикации
if ((isset($data['publish_setting']['publish_after']) && $data['publish_setting']['publish_after']) ||
(isset($data['publish_setting']['publish_at']) && $data['publish_setting']['publish_at'])) {
$data['publish_at'] = $this->setPublishDateTimeInFuture($data['publish_setting']);
}
unset($data['publish_setting']);
// Генерируем данные для поиска
$data['search_data'] = $this->generateSearchData($data['content']);
// Рассчитываем время чтения
$data['reading_time'] = $this->calculateReadingTime($data['search_data']);
return $data;
}
/**
* Устанавливает текст для предпросмотра.
*
@@ -77,7 +107,7 @@ class PostDataProcessor
private function setPublishDateTimeInFuture(array $publishSetting): ?Carbon
{
if ($publishSetting['publish_after'] === true) {
if (!empty($publishSetting['publish_at'])) {
return Carbon::parse($publishSetting['publish_at']);
}
@@ -2,10 +2,10 @@
namespace App\Services\Filament\Domain\Posts;
use App\Containers\Article\Models\Post;
use App\Containers\User\Models\Role;
use App\Containers\User\Models\User;
use App\Filament\Resources\PostResource;
use App\Models\Post;
use App\Models\Role;
use App\Models\User;
use Filament\Notifications\Actions\Action;
use Filament\Notifications\Notification;
@@ -2,10 +2,9 @@
namespace App\Services\Filament\Domain\Posts;
use App\Containers\Widget\Models\Slide;
use App\Dto\MainSliderDTO;
use App\Models\MainSlider;
use App\Models\Post;
use App\Models\Slide;
use App\Containers\Article\Models\Post;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Log;
@@ -2,9 +2,10 @@
namespace App\Services\Filament\Domain\Posts;
use App\Enums\PostStatus;
use App\Containers\Article\Enums\PostStatus;
use App\Containers\Article\Models\Post;
use App\Jobs\CreateVkPost;
use App\Models\Post;
use App\Jobs\UpdateVkPost;
use Illuminate\Support\Facades\Storage;
class VkPostPublisher
@@ -18,18 +19,31 @@ class VkPostPublisher
*/
public function publish(array $settings, Post $post): void
{
if ($post->status === PostStatus::PUBLISHED) {
if ($post->status->value === PostStatus::PUBLISHED->value) {
if ($settings['vk']) {
$text = $this->generateContentForVk($post->content);
$images = $this->generateImageLinksForVk($post->images);
$publishDate = $post->publish_at > now() ? $post->publish_at->timestamp : null;
dispatch(new CreateVkPost($post->title, $text, $images, $post->id, $publishDate));
}
}
}
public function update(array $settings, Post $post): void
{
if ($post->status->value === PostStatus::PUBLISHED->value) {
if ($settings['vk']) {
$text = $this->generateContentForVk($post->content);
$images = $this->generateImageLinksForVk($post->images);
$publishDate = $post->publish_at > now() ? $post->publish_at->timestamp : null;
dispatch(new UpdateVkPost($post->title, $text, $images, $post->id, $publishDate));
}
}
}
/**
* Генерирует текстовый контент для ВКонтакте.
*