2026.06.8
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user