From 977d54bc53e2b359bc8af98cdcbf18f92dddb6fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 31 Jul 2026 10:45:10 +0300 Subject: [PATCH] =?UTF-8?q?feat(=D0=B2=D0=BE=D1=80=D0=BE=D0=BD=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6):=20=D0=B1=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=B4=20=D1=81=D1=82=D0=B0=D0=B4=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=A2=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=80=D1=83=D1=87=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B8=20=D0=92=D1=8B=D1=81=D0=BB=D0=B0=D0=BD=D0=BE=20=D0=9A?= =?UTF-8?q?=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Стадии manual_testing и kp_sent в CHECK + 4 nullable-колонки под их поля. Откат и повторный накат проверены на своей тестовой базе измерением колонок. Статанализ пропущен с разрешения владельца: 287 замечаний было и до правки, все — известный ложный класс Pest, моих файлов среди них нет. Co-Authored-By: Claude Opus 5 (1M context) --- ...20000_add_manual_testing_and_kp_stages.php | 75 +++++++++++++++++++ docs/observer/STATUS.md | 8 +- 2 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 app/database/migrations/2026_07_31_120000_add_manual_testing_and_kp_stages.php diff --git a/app/database/migrations/2026_07_31_120000_add_manual_testing_and_kp_stages.php b/app/database/migrations/2026_07_31_120000_add_manual_testing_and_kp_stages.php new file mode 100644 index 00000000..114e2cd0 --- /dev/null +++ b/app/database/migrations/2026_07_31_120000_add_manual_testing_and_kp_stages.php @@ -0,0 +1,75 @@ +statement('ALTER TABLE sales_prospects DROP CONSTRAINT IF EXISTS sales_prospects_stage_check'); + $db->statement(<<<'SQL' + ALTER TABLE sales_prospects ADD CONSTRAINT sales_prospects_stage_check + CHECK (stage IN ('new','in_work','negotiation','manual_testing','registered', + 'testing','topped_up','user','kp_sent','rejected','no_answer')) + SQL); + + $db->statement('ALTER TABLE sales_prospects ADD COLUMN IF NOT EXISTS test_channel VARCHAR(8) NULL'); + $db->statement('ALTER TABLE sales_prospects ADD COLUMN IF NOT EXISTS test_target VARCHAR(500) NULL'); + $db->statement('ALTER TABLE sales_prospects ADD COLUMN IF NOT EXISTS kp_channel VARCHAR(16) NULL'); + $db->statement('ALTER TABLE sales_prospects ADD COLUMN IF NOT EXISTS kp_target VARCHAR(500) NULL'); + + $db->statement('ALTER TABLE sales_prospects DROP CONSTRAINT IF EXISTS sales_prospects_test_channel_check'); + $db->statement(<<<'SQL' + ALTER TABLE sales_prospects ADD CONSTRAINT sales_prospects_test_channel_check + CHECK (test_channel IS NULL OR test_channel IN ('phone','site')) + SQL); + + $db->statement('ALTER TABLE sales_prospects DROP CONSTRAINT IF EXISTS sales_prospects_kp_channel_check'); + $db->statement(<<<'SQL' + ALTER TABLE sales_prospects ADD CONSTRAINT sales_prospects_kp_channel_check + CHECK (kp_channel IS NULL OR kp_channel IN ('email','whatsapp','telegram','max','other')) + SQL); + } + + public function down(): void + { + $db = DB::connection('pgsql_supplier'); + + $db->statement('ALTER TABLE sales_prospects DROP CONSTRAINT IF EXISTS sales_prospects_kp_channel_check'); + $db->statement('ALTER TABLE sales_prospects DROP CONSTRAINT IF EXISTS sales_prospects_test_channel_check'); + $db->statement('ALTER TABLE sales_prospects DROP COLUMN IF EXISTS kp_target'); + $db->statement('ALTER TABLE sales_prospects DROP COLUMN IF EXISTS kp_channel'); + $db->statement('ALTER TABLE sales_prospects DROP COLUMN IF EXISTS test_target'); + $db->statement('ALTER TABLE sales_prospects DROP COLUMN IF EXISTS test_channel'); + + // Карточки с новых стадий — в «Переговоры», иначе прежний CHECK не встанет. + $db->statement(<<<'SQL' + UPDATE sales_prospects SET stage = 'negotiation' + WHERE stage IN ('manual_testing','kp_sent') + SQL); + $db->statement('ALTER TABLE sales_prospects DROP CONSTRAINT IF EXISTS sales_prospects_stage_check'); + $db->statement(<<<'SQL' + ALTER TABLE sales_prospects ADD CONSTRAINT sales_prospects_stage_check + CHECK (stage IN ('new','in_work','negotiation','registered','testing', + 'topped_up','user','rejected','no_answer')) + SQL); + } +}; diff --git a/docs/observer/STATUS.md b/docs/observer/STATUS.md index a03dd82b..34000cb5 100644 --- a/docs/observer/STATUS.md +++ b/docs/observer/STATUS.md @@ -1,6 +1,6 @@ # Brain Status (auto-generated) -Last updated: 2026-07-31T07:17:07.339Z +Last updated: 2026-07-31T07:18:39.591Z | Контролёр | Состояние | Детали | |---|---|---| @@ -112,9 +112,9 @@ Episodes since last run: 542 / threshold: 10 | PID | Имя | CPU-время | Возраст | |---|---|---|---| -| 3544 | MsMpEng | 16.60ч | NaNч | -| 23936 | Code | 4.75ч | 14477457.8ч | -| 4 | System | 2.51ч | 1328719.3ч | +| 3544 | MsMpEng | 16.63ч | NaNч | +| 23936 | Code | 4.77ч | 0.0ч | +| 4 | System | 2.52ч | 0.0ч | ⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий.