43 lines
2.1 KiB
PHP
43 lines
2.1 KiB
PHP
<?php
|
|
|
|
use App\Models\AwardCancellation;
|
|
use App\Models\PurchaseAward;
|
|
use App\Models\User;
|
|
use App\Services\PurchaseRevisionWorkflow;
|
|
use App\Services\PurchaseWorkflow;
|
|
use Illuminate\Contracts\Console\Kernel;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Validation\ValidationException;
|
|
|
|
require __DIR__.'/../../vendor/autoload.php';
|
|
$database = $argv[1] ?? '';
|
|
if (! preg_match('/^compras_receipts_test_[a-f0-9]{12}$/', $database)) {
|
|
throw new LogicException('Base de teste inválida.');
|
|
}
|
|
$app = require __DIR__.'/../../bootstrap/app.php';
|
|
$app->make(Kernel::class)->bootstrap();
|
|
if (! $app->environment('testing') || DB::connection()->getDatabaseName() !== $database) {
|
|
throw new LogicException('Worker não isolado.');
|
|
}
|
|
DB::select('select set_config(?, ?, false)', ['application_name', 'sgc_purchase_controls_'.$argv[4]]);
|
|
$pid = DB::selectOne('select pg_backend_pid() as pid')->pid;
|
|
$user = User::query()->findOrFail($argv[2]);
|
|
auth()->guard()->setUser($user);
|
|
$payload = json_decode(stream_get_contents(STDIN), true, 512, JSON_THROW_ON_ERROR);
|
|
$resultId = null;
|
|
try {
|
|
if ($payload['action'] === 'issue') {
|
|
$resultId = app(PurchaseWorkflow::class)->issue($user, PurchaseAward::query()->findOrFail($argv[3]))->id;
|
|
} elseif ($payload['action'] === 'request') {
|
|
$resultId = app(PurchaseRevisionWorkflow::class)->request($user, PurchaseAward::query()->findOrFail($argv[3]), 'Cancelamento concorrente exclusivamente fictício')->id;
|
|
} elseif ($payload['action'] === 'revise') {
|
|
$resultId = app(PurchaseRevisionWorkflow::class)->revise($user, AwardCancellation::query()->findOrFail($argv[3]), today()->addWeek()->format('Y-m-d'), 'Revisão concorrente exclusivamente fictícia')->id;
|
|
} else {
|
|
app(PurchaseRevisionWorkflow::class)->review($user, AwardCancellation::query()->findOrFail($argv[3]), $payload['decision'], 'Decisão concorrente exclusivamente fictícia');
|
|
}
|
|
$status = 200;
|
|
} catch (ValidationException) {
|
|
$status = 422;
|
|
}
|
|
echo json_encode(['status' => $status, 'backend_pid' => $pid, 'result_id' => $resultId], JSON_THROW_ON_ERROR);
|