Добавил поддержку webhook от репликатора

This commit is contained in:
brusnitsyn
2026-06-16 15:24:40 +09:00
parent 14e6c790ed
commit 705ec671a4
5 changed files with 42 additions and 0 deletions

View File

@@ -73,3 +73,5 @@ VITE_APP_VERSION="${APP_VERSION}"
VITE_APP_TAG="${APP_TAG}"
VITE_SENTRY_DNS=
SYNCIO_SECRET=

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Api\Syncio;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class SyncioWebhookController extends Controller
{
public function __invoke(Request $request)
{
// Проверка секрета
if ($request->header('X-Syncio-Secret') !== config('services.syncio.secret')) {
abort(403);
}
$data = $request->json()->all();
// $data['status'] 'success' | 'partial_success' | 'failed'
// $data['tables']['success'] кол-во успешных
// $data['errors'] массив ошибок
// Дальше что нужно:
// ReplicationFinished::dispatch($data); // Job в очередь
// event(new ReplicationCompleted($data)); // Laravel Event
// Cache::put('replication_status', $data, now()->addHours(24));
return response()->noContent(); // 204
}
}

View File

@@ -17,6 +17,9 @@ return Application::configure(basePath: dirname(__DIR__))
HandleInertiaRequests::class,
'auth' => \App\Http\Middleware\Authenticate::class,
]);
$middleware->validateCsrfTokens(except: [
'api/syncio/webhook'
]);
})
->withExceptions(function (Exceptions $exceptions): void {
//

View File

@@ -35,4 +35,8 @@ return [
],
],
'syncio' => [
'secret' => env('SYNCIO_SECRET'),
]
];

View File

@@ -114,4 +114,8 @@ Route::middleware(['auth:sanctum'])->group(function () {
Route::post('close', [\App\Http\Controllers\Web\DutyReportController::class, 'closeObservation']);
});
});
Route::prefix('syncio')->group(function () {
Route::post('webhook', \App\Http\Controllers\Api\Syncio\SyncioWebhookController::class);
});
});