Добалвен параметр dry-run для не внесения изменений в БД ИИ based

master
an.nechaev 2026-06-18 12:04:24 +04:00
parent 1ded77c5dc
commit de65a2b60c
1 changed files with 26 additions and 15 deletions

View File

@ -5,7 +5,7 @@ use Nechaev\Reports\Core\App;
require_once __DIR__ . '/../functions.php';
require_once __DIR__ . '/../../init.php';
$options = getopt('h::', ['non-interactive::', 'help::', 'sprint-id::', 'team::', 'log::']);
$options = getopt('h::', ['non-interactive::', 'help::', 'sprint-id::', 'team::', 'log::', 'dry-run::']);
if (isset($options['h']) || isset($options['help'])) {
$helpText = "Использование: php " . basename($argv[0]) . " [ОПЦИИ]\n" .
@ -25,6 +25,7 @@ if (isset($options['h']) || isset($options['help'])) {
" (пересчитывается даже если процент уже посчитан)\n" .
" --log[=ПУТЬ] Писать процесс выполнения (ключ задачи и решение по ней) в файл.\n" .
" Если путь не указан, используется sprint_completion_<дата>.log\n" .
" --dry-run Только посчитать и показать результат, без изменений в базе данных\n" .
" --non-interactive Не задавать вопросы в процессе работы\n";
fwrite(STDOUT, $helpText);
@ -32,6 +33,7 @@ if (isset($options['h']) || isset($options['help'])) {
}
$interactiveMode = !isset($options['non-interactive']);
$dryRun = isset($options['dry-run']);
$sprintIdFilter = null;
if (isset($options['sprint-id']) && $options['sprint-id'] !== false && $options['sprint-id'] !== '') {
@ -139,6 +141,11 @@ foreach ($membershipRows as $row) {
echo "Найдено спринтов без посчитанного процента закрытия: " . count($sprints) . "\n";
if ($dryRun) {
echo "Режим dry-run: изменения в базу данных вноситься не будут.\n";
$writeLog("Режим dry-run: изменения в базу данных не вносятся.");
}
if ($interactiveMode) {
$answer = readline("Рассчитать процент закрытия для этих спринтов? (Y/n): ");
if (strtolower(trim($answer)) === 'n') {
@ -432,6 +439,7 @@ foreach ($sprintsByJiraId as $jiraSprintId => $sprintRows) {
$percentage = round($stats['done'] / $stats['total'] * 100, 2);
if (!$dryRun) {
try {
App::getDb()->execute(
"UPDATE sprints SET sprint_completion_percentage = :percentage WHERE id = :id",
@ -446,13 +454,16 @@ foreach ($sprintsByJiraId as $jiraSprintId => $sprintRows) {
$writeLog("Спринт '{$sprintName}' (команда {$teamId}): ошибка сохранения — " . $e->getMessage());
continue;
}
}
echo "Спринт '{$sprintName}' (команда {$teamId}): "
. "{$stats['done']} из {$stats['total']} задач завершено — {$percentage}%"
. ($notInSprintAtStartCount > 0 ? " (по спринту исключено отсутствовавших в спринте на старте: {$notInSprintAtStartCount})" : "")
. ($dryRun ? " [dry-run: не сохранено]" : "")
. "\n";
$writeLog("ИТОГ спринт '{$sprintName}' (команда {$teamId}): "
. "{$stats['done']}/{$stats['total']} закрыто — {$percentage}%");
. "{$stats['done']}/{$stats['total']} закрыто — {$percentage}%"
. ($dryRun ? " [dry-run: не сохранено]" : ""));
}
}