changes
This commit is contained in:
@@ -8,7 +8,6 @@ use App\Containers\Dashboard\Tasks\Content\GenerateSearchDataTask;
|
||||
class CreatePageAction
|
||||
{
|
||||
public function __construct(
|
||||
private readonly GeneratePagePathAction $generatePagePathAction,
|
||||
private readonly GenerateSearchDataTask $generateSearchDataTask,
|
||||
) {}
|
||||
|
||||
@@ -20,19 +19,11 @@ class CreatePageAction
|
||||
*/
|
||||
public function run(array $data): Page
|
||||
{
|
||||
$subSectionId = $data['sub_section_id'] ?? null;
|
||||
|
||||
// Генерируем path на основе subSection
|
||||
$data['path'] = $this->generatePagePathAction->run($data['slug'], $subSectionId);
|
||||
|
||||
// Генерируем search_data из контента
|
||||
if (!empty($data['content'])) {
|
||||
$data['search_data'] = $this->generateSearchDataTask->run($data['content']);
|
||||
}
|
||||
|
||||
// Удаляем sub_section_id — он не является полем модели Page
|
||||
unset($data['sub_section_id']);
|
||||
|
||||
return Page::create($data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Dashboard\Actions\Pages;
|
||||
|
||||
use App\Containers\AppStructure\Models\SubSection;
|
||||
|
||||
class GeneratePagePathAction
|
||||
{
|
||||
public function run(string $slug, ?int $subSectionId = null): string
|
||||
{
|
||||
if ($subSectionId === null) {
|
||||
return $slug;
|
||||
}
|
||||
|
||||
$subSection = SubSection::with('mainSection')->find($subSectionId);
|
||||
|
||||
if ($subSection === null) {
|
||||
return $slug;
|
||||
}
|
||||
|
||||
if ($subSection->mainSection === null) {
|
||||
return $subSection->slug . '/' . $slug;
|
||||
}
|
||||
|
||||
return $subSection->mainSection->slug . '/' . $subSection->slug . '/' . $slug;
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,6 @@ use App\Containers\Dashboard\Tasks\Content\GenerateSearchDataTask;
|
||||
class UpdatePageAction
|
||||
{
|
||||
public function __construct(
|
||||
private readonly GeneratePagePathAction $generatePagePathAction,
|
||||
private readonly GenerateSearchDataTask $generateSearchDataTask,
|
||||
) {}
|
||||
|
||||
@@ -26,17 +25,6 @@ class UpdatePageAction
|
||||
$data['search_data'] = $this->generateSearchDataTask->run($data['content']);
|
||||
}
|
||||
|
||||
// Если страница не зарегистрирована, перегенерируем path
|
||||
if ($page->is_registered == false) {
|
||||
$subSectionId = $data['sub_section_id'] ?? $page->sub_section_id;
|
||||
$slug = $data['slug'] ?? $page->slug;
|
||||
|
||||
$data['path'] = $this->generatePagePathAction->run($slug, $subSectionId);
|
||||
}
|
||||
|
||||
// Удаляем sub_section_id — он не является полем модели Page
|
||||
unset($data['sub_section_id']);
|
||||
|
||||
$page->update($data);
|
||||
|
||||
return $page->fresh();
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Dashboard\Actions\Posts;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class DeploySiteAction
|
||||
{
|
||||
private string $lockFile = '/var/www/_deploy/deploy.lock';
|
||||
private string $logFile = '/var/www/_deploy/deploy.log';
|
||||
|
||||
/**
|
||||
* Создаёт файл-триггер для запуска деплоя
|
||||
*
|
||||
* @return array ['success' => bool, 'message' => string]
|
||||
*/
|
||||
public function run(): array
|
||||
{
|
||||
try {
|
||||
// Проверяем, не запущен ли уже деплой
|
||||
if (file_exists($this->lockFile)) {
|
||||
$lockContent = file_get_contents($this->lockFile);
|
||||
$lockData = json_decode($lockContent, true);
|
||||
|
||||
if ($lockData && isset($lockData['status']) && $lockData['status'] === 'running') {
|
||||
return [
|
||||
'success' => false,
|
||||
'message' => 'Деплой уже запущен! Подождите завершения текущего процесса.',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// Создаём файл-триггер
|
||||
$lockData = [
|
||||
'status' => 'pending',
|
||||
'started_at' => now()->toDateTimeString(),
|
||||
'started_by' => auth()->id(),
|
||||
];
|
||||
|
||||
file_put_contents($this->lockFile, json_encode($lockData, JSON_PRETTY_PRINT));
|
||||
|
||||
Log::info('Deploy triggered', ['user_id' => auth()->id()]);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'message' => 'Деплой запущен! Процесс обновления сайта начнётся в течение 1 минуты.',
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
Log::error('Deploy trigger failed', ['exception' => $e->getMessage()]);
|
||||
|
||||
return [
|
||||
'success' => false,
|
||||
'message' => 'Ошибка при запуске деплоя: ' . $e->getMessage(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет статус деплоя
|
||||
*/
|
||||
public function getStatus(): array
|
||||
{
|
||||
if (!file_exists($this->lockFile)) {
|
||||
return ['status' => 'idle', 'message' => 'Деплой не запущен'];
|
||||
}
|
||||
|
||||
$content = file_get_contents($this->lockFile);
|
||||
$data = json_decode($content, true);
|
||||
|
||||
if (!$data) {
|
||||
return ['status' => 'error', 'message' => 'Ошибка чтения статуса'];
|
||||
}
|
||||
|
||||
// Читаем лог если есть
|
||||
$log = '';
|
||||
if (file_exists($this->logFile)) {
|
||||
$log = file_get_contents($this->logFile);
|
||||
}
|
||||
|
||||
return [
|
||||
'status' => $data['status'] ?? 'unknown',
|
||||
'started_at' => $data['started_at'] ?? null,
|
||||
'completed_at' => $data['completed_at'] ?? null,
|
||||
'message' => $data['message'] ?? '',
|
||||
'log' => $log,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Очищает статус деплоя
|
||||
*/
|
||||
public function clearStatus(): void
|
||||
{
|
||||
if (file_exists($this->lockFile)) {
|
||||
unlink($this->lockFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user