chore(history): squash 59 commit(s) from 2026-09-23
- refactor(hud/weather/render): Scoreboard 931→240 + Rain 903→159 + UiMeshGeometry 956→99 (8.5.2) - refactor(chams): Chams 985 → 129 + 4×≤195 (8.5.2) - refactor(module): Module 1031 → 139 + 4×≤134 (8.5.2) - refactor(tooltips): BetterTooltips 960 → 181 + 4×≤199 (8.5.2) - refactor(clickgui): ClickGuiPickerState 970→166 + ModulesMenuScreen 966→145 (8.5.2) - refactor(clickgui): CombatProtocolHeuristicsEditorState 932→79 + 4×≤192 (8.5.2) - refactor(hud): CompactHudStatModel 894 → 125 + 4×≤175 (8.5.2) - refactor(iris): ShaderPatchCompiler 843→66 + 4×≤174 (8.5.2) - refactor(tab): CustomTabList 834→136 + 4×≤166 (8.5.2) - refactor(relations): OnlineRelationPlayerPickerComponent 837→74 + 4×≤192 (8.5.2) - refactor(hits): HitEffect 770→120 + 4×≤176 (8.5.2) - refactor(predict): Predictions 815→150 + 4×≤195 (8.5.2) - refactor(config): ConfigProfilesComponent 799→125 + 4×≤195 (8.5.2) - refactor(sim): PlayerMovementSimulation 757→157 + 4×≤194 (8.5.2) - refactor(predict): ProjectilePuncher 747→104 + 3×≤134 (8.5.2) - refactor(crosshair): Crosshair 743→143 + 4×≤167 (8.5.2) - refactor(mediaplayer): MediaPlayer 743→174 + 4×≤196 (8.5.2) - refactor(hud): Itemizer 699→193 + Cooldowns 707→151 (8.5.2) - refactor(hud): Potions 617→176 + 4×≤166 (8.5.2) - refactor(hud): Admins 702→118 + 4×≤138 (8.5.2) - refactor(hud): Keybinds 611→157 + 4×≤160 (8.5.2) - refactor(hud): ModuleList 499→181 + 3×≤150 (8.5.2) - refactor(hud): Radar 392→161 + 2×≤124 (8.5.2) - refactor(hud): Fps 309→168 + 3×≤107 (8.5.2) - refactor(hud): Memory 304→151 + 3×≤144 (8.5.2) - refactor(hud): Tps 339→154 + 3×≤143 (8.5.2) - refactor(hud): Ping 309→145 + 3×≤125 (8.5.2) - refactor(hud): SpeedBps 334→156 + 3×≤142 (8.5.2) - refactor(hud): GameTime 314→150 + 3×≤127 (8.5.2) - refactor(hud): SystemTime 300→136 + 3×≤130 (8.5.2) - refactor(hud): Coordinates 337→174 + 2×≤172 (8.5.2) - refactor(hud): Armor 324→162 + 2×≤148 (8.5.2) - refactor(hud): Inventory 476→153 + 3×≤181 (8.5.2) - docs(todo): обновлён 8.5.2 — отмечены готовые гиганты (BetterButtons/InventorySwap/Svg/Темы/WorldParticles/Module/Chams и хвост) - docs(api): папка combatant-client-26.2/docs + addons.md (API можно ломать при рефакторе) - refactor(visuals): BlockHighlight 692→271 + 4×≤200 (8.5.2) - refactor(mixins): GameRendererMixin 830→344 (хуки) + 4 хелпера (8.5.2) - refactor(visuals): WorldParticles 821→260 + 6×≤200, режимы добиты (8.5.2) - docs(todo): 8.5.2 — WorldParticles/GameRendererMixin/BlockHighlight отмечены ГОТОВО - refactor(render): MeshBuilder 738→447 (фасад write-API) + 3 хелпера, FrameStats снесён (8.5.2) - docs(todo): Фаза 10 — дизайн платформы (аккаунты/конфиги/аватарки), backlog RPC-чата - docs(todo): Подсистема 3 — Аддоны 2.0 (скрипты/версии) + витрина аддонов + админка - docs(todo): Подсистема 2 — RPC-чат/друзья/виджеты-телеметрия + рейт-лимиты, доп. правки Подсистемы 3 - chore: переименование combatant-client-26.2 -> mod, добавлены backend/ и frontend/ - docs(backend): implementation plan for accounts-service (Подсистема 1, часть 1) - chore: пересоздать backend/frontend через cargo new и bun create vite + tailwind; убрать таблицу компонентов из TODO.md - docs(backend): edition 2024 в плане вместо 2021 - chore: обновить версии до реально актуальных (проверено компиляцией) - docs: правила платформы (лимит 250 строк, антипаттерны backend/frontend по итогам ресёрча) + frontend/ARCHITECTURE.md - docs: добавить правило ≤4 файла на папку в правила платформы (backend/frontend) - docs: commit messages in English from now on - chore: gitignore .superpowers/ scratch directory - docs: commit messages in English from now on (mod) - feat(backend): scaffold accounts-service with health check - chore(backend): remove target/ build artifacts from git, add gitignore - chore: track docs/ in git (was accidentally gitignored, never committed) - chore(backend): convert to Cargo workspace, plan full microservice layout - feat(backend): accounts/avatars/device_links schema + migration - feat(backend): argon2id password hashing
This commit is contained in:
parent
ec10395511
commit
9d08fa910a
2239 changed files with 35265 additions and 28110 deletions
75
frontend/ARCHITECTURE.md
Normal file
75
frontend/ARCHITECTURE.md
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# Frontend Architecture (продумано заранее, реализация — следующий план)
|
||||
|
||||
> Статус: структура согласована до написания implementation-плана фронтенда,
|
||||
> чтобы план сразу проектировался под правильные границы, а не переписывался
|
||||
> после первого клубка спагетти. Стек: React + Vite + TypeScript + Tailwind
|
||||
> (см. `TODO.md`, Фаза 10). Правила платформы (≤250 строк/файл и т.д.) — там же.
|
||||
|
||||
## Принцип: структура по фичам, не по типу файла
|
||||
|
||||
Раскладывать `src/` на `/components`, `/hooks`, `/services`, `/types` вперемешку —
|
||||
самая частая ошибка в React-проектах: одна фича размазывается по всему дереву
|
||||
папок, и её нельзя удалить или вынести, не задев остальное. Вместо этого —
|
||||
каждая фича владеет всем, что ей нужно, в одной папке.
|
||||
|
||||
```
|
||||
frontend/src/
|
||||
features/
|
||||
auth/ # регистрация/логин, device-link экран
|
||||
components/
|
||||
hooks/
|
||||
api.ts # вызовы к accounts-service через gateway
|
||||
types.ts
|
||||
configs/ # 4 слота, share-коды, витрина
|
||||
components/
|
||||
hooks/
|
||||
api.ts
|
||||
types.ts
|
||||
avatars/
|
||||
admin/ # /admin, видим только role=admin
|
||||
shared/ # только то, что реально используют 2+ фичи
|
||||
components/ # кнопки, инпуты, модалки — дизайн-система
|
||||
hooks/ # useAuth (общий контекст сессии), useDebounce и т.п.
|
||||
api/
|
||||
client.ts # общий fetch-wrapper: base URL gateway, JWT в заголовке,
|
||||
# обработка 401 (refresh) и 429 (rate-limit) в одном месте
|
||||
types.ts # общие DTO, если совпадают на нескольких фичах
|
||||
pages/ # роуты верхнего уровня, тонкие — просто собирают
|
||||
# фичи в layout, никакой бизнес-логики
|
||||
App.tsx
|
||||
main.tsx
|
||||
```
|
||||
|
||||
Правило раздела shared/feature: если код используется ровно в одной фиче —
|
||||
он живёт в этой фиче, а не в `shared/`. Переносить в `shared/` только когда
|
||||
появился второй потребитель — не заранее "на всякий случай" (YAGNI).
|
||||
|
||||
**Лимиты из правил платформы (`TODO.md`) действуют и тут**: ≤250 строк на
|
||||
файл, ≤4 файла на папку (подпапки не считаются) — если в `components/`
|
||||
внутри фичи появляется 5-й файл, выносим смысловую подпапку, а не копим.
|
||||
|
||||
## Антипаттерны, которых сознательно избегаем
|
||||
|
||||
- **Barrel-файлы `index.ts` на каждую папку** — удобны на вид, но ломают
|
||||
tree-shaking и IDE go-to-definition на больших проектах; экспортируем
|
||||
напрямую из файла, где определено
|
||||
- **Prop drilling через 4+ уровня** — если проп передаётся через компоненты,
|
||||
которым он сам не нужен (просто транзитом) — это сигнал на React Context
|
||||
(для auth-сессии) или на подъём компонента ниже по дереву, а не терпеть
|
||||
drilling
|
||||
- **Бизнес-логика в `pages/`** — страницы только компонуют фичи и layout;
|
||||
если в файле страницы появляется `fetch`/сложная derived-логика — она
|
||||
переезжает в соответствующую фичу
|
||||
- **Один гигантский `api.ts` на весь проект** — обращения к API живут в
|
||||
папке своей фичи (`features/configs/api.ts` и т.д.), общий только
|
||||
low-level `shared/api/client.ts` (fetch-wrapper)
|
||||
- **any вместо нормальных типов** — DTO с бэкенда типизируются по контрактам
|
||||
из `backend/PLAN.md` (Task 6: `RegisterResponse`, `LoginResponse` и т.д.),
|
||||
не `any`/`unknown` без сужения
|
||||
|
||||
## Тестирование (когда дойдёт до реализации)
|
||||
Колокация тестов рядом с кодом (`Component.test.tsx` рядом с `Component.tsx`),
|
||||
не отдельное дерево `tests/` — так тест физически не потеряется при
|
||||
удалении/переносе фичи.
|
||||
|
||||
Источники: [Robin Wieruch — React Folder Structure Best Practices 2026](https://www.robinwieruch.de/react-folder-structure/), [Mastering Modern React + Vite Folder Structure, Medium](https://sandeshrathnayake.medium.com/mastering-modern-react-vite-folder-structure-a-production-ready-guide-for-scalable-applications-9ad8e233f8b9).
|
||||
Loading…
Add table
Add a link
Reference in a new issue