2026.06.8

This commit is contained in:
brusnitsyn
2026-06-18 17:45:41 +09:00
parent 698422e0ba
commit f163b95663
15 changed files with 695 additions and 20 deletions

View File

@@ -4,6 +4,8 @@ namespace App\Http\Controllers\Api\Syncio;
use App\Http\Controllers\Controller;
use App\Jobs\RefreshMaterializedViews;
use App\Models\ReplicationLog;
use App\Models\ReplicationSchedule;
use Illuminate\Http\Request;
class SyncioWebhookController extends Controller
@@ -20,6 +22,24 @@ class SyncioWebhookController extends Controller
// $data['tables']['success'] кол-во успешных
// $data['errors'] массив ошибок
$scheduleId = $data['schedule_id'] ?? ($data['schedule']['id'] ?? null);
// Обрабатываем только расписания, заведённые в таблице (связанные с проектом)
if (! ReplicationSchedule::active()->where('schedule_id', $scheduleId)->exists()) {
return response()->noContent(); // 204, но игнорируем чужое расписание
}
// Сохраняем информацию о репликации из вебхука
ReplicationLog::create([
'status' => $data['status'] ?? null,
'schedule_id' => $scheduleId,
'tables_success' => (int) ($data['tables']['success'] ?? 0),
'tables_failed' => (int) ($data['tables']['failed'] ?? 0),
'errors' => $data['errors'] ?? null,
'payload' => $data,
'received_at' => now(),
]);
// При успешной репликации обновляем материализованные представления
if (($data['status'] ?? null) === 'success') {
RefreshMaterializedViews::dispatch();