[CL-REFACTOR] refactor(portfolio): split DemoPortfolio god-file (1007→293 + 714) #977

Merged
andrei merged 1 commit from feature/claude-godfile-demoportfolio-20260702 into master 2026-07-02 18:57:57 +00:00
Owner

Что сделано

DemoPortfolio.tsx (1007 строк) разбит: mock-preset-data + i18n-хелперы вынесены в новый DemoPortfolio.data.tsx (714 строк), компонент остался в DemoPortfolio.tsx (293 строки). Оба файла <800.

Вынесены: Segment/PresetProperty/PresetData (interfaces), getPropertyName, PRESETS, LOCALIZED_TEXT, getLocText, getChecklist. Публичная поверхность data-модуля — PRESETS, getLocText, getChecklist (то, что использует компонент).

Зачем

Review High #2 (mega-audit 2026-07-02): 45 файлов >800 строк — god-file риск maintainability. DemoPortfolio был крупнейшим app-компонентом. Data и view разнесены → каждый файл читаемее и тестируемее по отдельности.

План тестирования

  • TDD: contract-тест на data-модуль RED (модуль отсутствовал) → extraction → GREEN 3/3 (PRESETS-ключи, preset-форма, getLocText/getChecklist callable).
  • tsc --noEmit 0 (ловит недостающие export/import), eslint 0 (import-split точный, 0 unused).
  • Behavior-preserving: default export DemoPortfolio не тронут → route (единственный caller) не затронут, zero blast. Хелперы pure (lang-arg, без хуков).

Где могу ошибаться

  • Data-модуль .tsx (getChecklist/PRESETS содержат JSX-иконки) — не .ts. Оправдано: иконки — часть mock-данных.
  • Демо-страница (не money-critical) — низкий риск, но реальное maintainability-улучшение + демонстрация паттерна для остальных god-files.
## Что сделано `DemoPortfolio.tsx` (1007 строк) разбит: mock-preset-data + i18n-хелперы вынесены в новый `DemoPortfolio.data.tsx` (714 строк), компонент остался в `DemoPortfolio.tsx` (293 строки). Оба файла <800. Вынесены: `Segment`/`PresetProperty`/`PresetData` (interfaces), `getPropertyName`, `PRESETS`, `LOCALIZED_TEXT`, `getLocText`, `getChecklist`. Публичная поверхность data-модуля — `PRESETS`, `getLocText`, `getChecklist` (то, что использует компонент). ## Зачем Review High #2 (mega-audit 2026-07-02): 45 файлов >800 строк — god-file риск maintainability. DemoPortfolio был крупнейшим app-компонентом. Data и view разнесены → каждый файл читаемее и тестируемее по отдельности. ## План тестирования - TDD: contract-тест на data-модуль RED (модуль отсутствовал) → extraction → GREEN 3/3 (PRESETS-ключи, preset-форма, getLocText/getChecklist callable). - `tsc --noEmit` 0 (ловит недостающие export/import), `eslint` 0 (import-split точный, 0 unused). - Behavior-preserving: default export `DemoPortfolio` не тронут → route (единственный caller) не затронут, zero blast. Хелперы pure (lang-arg, без хуков). ## Где могу ошибаться - Data-модуль `.tsx` (getChecklist/PRESETS содержат JSX-иконки) — не `.ts`. Оправдано: иконки — часть mock-данных. - Демо-страница (не money-critical) — низкий риск, но реальное maintainability-улучшение + демонстрация паттерна для остальных god-files.
[CL-REFACTOR] refactor(portfolio): split DemoPortfolio god-file (1007→293 + 714)
Some checks failed
CI / API (pull_request) Has been cancelled
CI / App (pull_request) Has been cancelled
CI / Prisma Migrate Gate (pull_request) Has been cancelled
React Doctor / React Doctor / App (pull_request) Has been cancelled
CI / Python SDK (pull_request) Has been cancelled
CI / Secrets Scan (pull_request) Has been cancelled
CI / Contracts (pull_request) Has been cancelled
CI / Telegram Mini App (pull_request) Has been cancelled
PR Janitor / janitor (pull_request) Has been cancelled
7fa74c319b
Review High #2 (mega-audit 2026-07-02): DemoPortfolio.tsx был 1007 строк.
Вынесены mock-preset-data + i18n-хелперы (interfaces, getPropertyName, PRESETS,
LOCALIZED_TEXT, getLocText, getChecklist) в DemoPortfolio.data.tsx (714 строк);
компонент остался в DemoPortfolio.tsx (293 строки). Оба <800.

Behavior-preserving: default export DemoPortfolio не тронут → route (единственный
caller) не затронут, zero blast (Serena/tsc verified). Хелперы pure (берут lang-arg,
без хуков). Import-split точный (eslint 0 unused).

TDD: data-модуль contract-тест RED (модуль отсутствовал) → extraction → GREEN 3/3.
tsc 0, eslint 0.
andrei merged commit 7e4083b94f into master 2026-07-02 18:57:57 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europatech!977
No description provided.