feat(vikon): add updatePart endpoint with request validation
This commit is contained in:
@@ -7,7 +7,9 @@ use App\Containers\VikonIntegration\Actions\CheckAccessAction;
|
|||||||
use App\Containers\VikonIntegration\Actions\CheckVersionAction;
|
use App\Containers\VikonIntegration\Actions\CheckVersionAction;
|
||||||
use App\Containers\VikonIntegration\Actions\SyncFilesAction;
|
use App\Containers\VikonIntegration\Actions\SyncFilesAction;
|
||||||
use App\Containers\VikonIntegration\Actions\UpdateCoreAction;
|
use App\Containers\VikonIntegration\Actions\UpdateCoreAction;
|
||||||
|
use App\Containers\VikonIntegration\Actions\UpdatePartAction;
|
||||||
use App\Containers\VikonIntegration\Tasks\FilesystemTask;
|
use App\Containers\VikonIntegration\Tasks\FilesystemTask;
|
||||||
|
use App\Containers\VikonIntegration\Tasks\PollPartStatusTask;
|
||||||
use App\Containers\VikonIntegration\Tasks\HttpTask;
|
use App\Containers\VikonIntegration\Tasks\HttpTask;
|
||||||
use App\Containers\VikonIntegration\Tasks\RefreshTokenTask;
|
use App\Containers\VikonIntegration\Tasks\RefreshTokenTask;
|
||||||
use App\Containers\VikonIntegration\Tasks\ValidateTokenTask;
|
use App\Containers\VikonIntegration\Tasks\ValidateTokenTask;
|
||||||
@@ -40,6 +42,21 @@ class VikonServiceProvider extends ServiceProvider
|
|||||||
|
|
||||||
$this->app->singleton(FilesystemTask::class, fn () => new FilesystemTask);
|
$this->app->singleton(FilesystemTask::class, fn () => new FilesystemTask);
|
||||||
|
|
||||||
|
$this->app->singleton(PollPartStatusTask::class, fn ($app) => new PollPartStatusTask(
|
||||||
|
http: $app->make(HttpTask::class),
|
||||||
|
interval: config('vikon.poll_interval', 3),
|
||||||
|
maxAttempts: config('vikon.poll_max_attempts', 50),
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->app->singleton(UpdatePartAction::class, fn ($app) => new UpdatePartAction(
|
||||||
|
http: $app->make(HttpTask::class),
|
||||||
|
fs: $app->make(FilesystemTask::class),
|
||||||
|
pollStatus: $app->make(PollPartStatusTask::class),
|
||||||
|
storagePath: config('vikon.storage_path'),
|
||||||
|
basePath: public_path(),
|
||||||
|
modulesConfig: config('vikon.modules'),
|
||||||
|
));
|
||||||
|
|
||||||
$this->app->singleton(AuthenticateAction::class, fn ($app) => new AuthenticateAction(
|
$this->app->singleton(AuthenticateAction::class, fn ($app) => new AuthenticateAction(
|
||||||
http: $app->make(HttpTask::class),
|
http: $app->make(HttpTask::class),
|
||||||
clientId: config('vikon.client_id'),
|
clientId: config('vikon.client_id'),
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ use App\Containers\VikonIntegration\Actions\CheckAccessAction;
|
|||||||
use App\Containers\VikonIntegration\Actions\CheckVersionAction;
|
use App\Containers\VikonIntegration\Actions\CheckVersionAction;
|
||||||
use App\Containers\VikonIntegration\Actions\SyncFilesAction;
|
use App\Containers\VikonIntegration\Actions\SyncFilesAction;
|
||||||
use App\Containers\VikonIntegration\Actions\UpdateCoreAction;
|
use App\Containers\VikonIntegration\Actions\UpdateCoreAction;
|
||||||
|
use App\Containers\VikonIntegration\Actions\UpdatePartAction;
|
||||||
use App\Containers\VikonIntegration\Tasks\RefreshTokenTask;
|
use App\Containers\VikonIntegration\Tasks\RefreshTokenTask;
|
||||||
use App\Containers\VikonIntegration\Tasks\ValidateTokenTask;
|
use App\Containers\VikonIntegration\Tasks\ValidateTokenTask;
|
||||||
use App\Containers\VikonIntegration\UI\WEB\Requests\AuthenticateRequest;
|
use App\Containers\VikonIntegration\UI\WEB\Requests\AuthenticateRequest;
|
||||||
use App\Containers\VikonIntegration\UI\WEB\Requests\UpdateModuleRequest;
|
use App\Containers\VikonIntegration\UI\WEB\Requests\UpdateModuleRequest;
|
||||||
|
use App\Containers\VikonIntegration\UI\WEB\Requests\UpdatePartRequest;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -25,6 +27,7 @@ class VikonController extends Controller
|
|||||||
private readonly CheckVersionAction $checkVersion,
|
private readonly CheckVersionAction $checkVersion,
|
||||||
private readonly UpdateCoreAction $updateCore,
|
private readonly UpdateCoreAction $updateCore,
|
||||||
private readonly SyncFilesAction $syncFiles,
|
private readonly SyncFilesAction $syncFiles,
|
||||||
|
private readonly UpdatePartAction $updatePart,
|
||||||
private readonly RefreshTokenTask $refreshToken,
|
private readonly RefreshTokenTask $refreshToken,
|
||||||
private readonly ValidateTokenTask $validateToken,
|
private readonly ValidateTokenTask $validateToken,
|
||||||
) {}
|
) {}
|
||||||
@@ -163,6 +166,26 @@ class VikonController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function updatePart(UpdatePartRequest $request): JsonResponse
|
||||||
|
{
|
||||||
|
$token = Session::get('vikon_access_token');
|
||||||
|
if (!$token) {
|
||||||
|
return response()->json(['success' => false, 'requires_auth' => true], 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$result = $this->updatePart->run(
|
||||||
|
$request->validated('module_id'),
|
||||||
|
$request->validated('part'),
|
||||||
|
$token
|
||||||
|
);
|
||||||
|
return response()->json($result);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
Log::error('Vikon part update failed', ['error' => $e->getMessage()]);
|
||||||
|
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function logout(): JsonResponse
|
public function logout(): JsonResponse
|
||||||
{
|
{
|
||||||
Session::forget(['vikon_access_token', 'vikon_refresh_token']);
|
Session::forget(['vikon_access_token', 'vikon_refresh_token']);
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Containers\VikonIntegration\UI\WEB\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class UpdatePartRequest extends FormRequest
|
||||||
|
{
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'module_id' => ['required', 'integer', 'in:1,2,6'],
|
||||||
|
'part' => ['required', 'string', 'max:50'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,5 +16,6 @@ Route::prefix('/dashboard/vikon-updates')
|
|||||||
Route::post('/check-version', [VikonController::class, 'checkVersion'])->name('check-version');
|
Route::post('/check-version', [VikonController::class, 'checkVersion'])->name('check-version');
|
||||||
Route::post('/update-module', [VikonController::class, 'updateModule'])->name('update-module');
|
Route::post('/update-module', [VikonController::class, 'updateModule'])->name('update-module');
|
||||||
Route::post('/sync-files', [VikonController::class, 'syncFiles'])->name('sync-files');
|
Route::post('/sync-files', [VikonController::class, 'syncFiles'])->name('sync-files');
|
||||||
|
Route::post('/update-part', [VikonController::class, 'updatePart'])->name('update-part');
|
||||||
Route::post('/logout', [VikonController::class, 'logout'])->name('logout');
|
Route::post('/logout', [VikonController::class, 'logout'])->name('logout');
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user