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_planning_'.$argv[4]]); $pid = DB::selectOne('select pg_backend_pid() as pid')->pid; $actor = User::query()->findOrFail($argv[2]); auth()->guard()->setUser($actor); $payload = json_decode(stream_get_contents(STDIN), true, 512, JSON_THROW_ON_ERROR); try { $workflow = app(PurchasePlanningWorkflow::class); if ($payload['action'] === 'dates') { $workflow->update($actor, PurchasePlanMilestone::query()->findOrFail($argv[3]), ['version' => 1, 'actual_on' => $payload['actual_on'], 'reason' => 'Actualização concorrente fictícia']); } elseif ($payload['action'] === 'assign') { $workflow->assign($actor, PurchasePlanItem::query()->findOrFail($argv[3]), $payload['responsible_id'], 1, 'Atribuição concorrente fictícia'); } else { $workflow->milestone($actor, PurchasePlanItem::query()->findOrFail($argv[3]), 'Marco concorrente fictício', today()->format('Y-m-d')); } $status = 200; } catch (ValidationException) { $status = 422; } catch (HttpExceptionInterface $exception) { $status = $exception->getStatusCode(); } echo json_encode(['status' => $status, 'backend_pid' => $pid], JSON_THROW_ON_ERROR);