mirror of
https://github.com/Vateron-Media/XC_VM.git
synced 2026-10-17 12:02:55 +02:00
Fix Markdown-mangling artifacts the free web engine (yandex) produced in the
committed docs/ru, and regenerate the whole tree cleanly (0 fallbacks):
- Sentinel format @@N@@ -> {N}. MT engines are trained to preserve curly
format-string placeholders, so {N} survives code-heavy lines where @@N@@ (and
ZZZ…ZZZ, which also duplicated its Z) were split/moved — e.g. the stray
"@0@@" in the FAQ and "load balancerZ" in the README are gone.
- Possessive: a trailing English `'s` is consumed INTO the masked span and
dropped on restore. Every sentinel format breaks when a bare `'s` sits right
after it, and Russian has no possessive `'s`.
- Validate + retry: after restore, any leftover brace fragment triggers a retry
(the engine is non-deterministic); after a few failures the line stays English
so a broken token is never emitted.
- Glossary += KeyDB, yt-dlp, Ubuntu, iptables, MAGSCAN.
Regenerated docs/ru (37 files, translators/yandex): no residual sentinels,
mkdocs build --strict clean.
114 lines
5.9 KiB
Markdown
114 lines
5.9 KiB
Markdown
# Обзор архитектуры
|
||
|
||
## Тип проекта
|
||
|
||
Структурированный монолит PHP с модульным дополнительным слоем.
|
||
|
||
- Никакого DDD, никакой гексагональности, никакой чистой архитектуры — намеренно.
|
||
- Split by context with minimal abstractions: `Controller → Service → Repository`.
|
||
- Два артефакта сборки из одной кодовой базы: **MAIN** (полная панель) и **LB** (подмножество load balancer).
|
||
|
||
---
|
||
|
||
## Дерево исходных текстов
|
||
|
||
|Путь|Роль|
|
||
| ---- | ---- |
|
||
| `src/Core/` |Примитивы инфраструктуры: Контейнер DI, события, HTTP, настройка, аутентификация, ведение журнала|
|
||
| `src/Domain/` |Бизнес-контексты: Поток, VOD, линия, пользователь, сервер, безопасность и т.д.|
|
||
| `src/Modules/` |Дополнительный слой расширения — загружается с помощью `ModuleLoader`|
|
||
| `src/Public/` |Передний контроллер, маршрутизатор, контроллеры, представления, ресурсы|
|
||
| `src/Cli/` |Консольные команды и точки входа в cron|
|
||
| `src/Ministra/` | Stalker Portal — in core; served at `/home/xc_vm/Ministra` |
|
||
|
||
---
|
||
|
||
## Модель времени выполнения
|
||
|
||
Зависимости перетекают друг в друга — модули могут использовать ядро и домен, но никогда наоборот.
|
||
|
||
```
|
||
Public/index.php
|
||
└── XC_Bootstrap::boot(BootContext::ADMIN)
|
||
└── ServiceContainer (DI)
|
||
├── EventDispatcher (PSR-14)
|
||
├── ModuleLoader → loadAll() → bootAll()
|
||
└── Router → dispatch()
|
||
```
|
||
|
||
Классы домена получают базу данных посредством внедрения `setDb()` (вызывается из
|
||
`bootstrap.php::wireDomainDatabase()`). Нет `global $db` в пути веб-запроса.
|
||
|
||
---
|
||
|
||
## Модульная система
|
||
|
||
Модули представляют собой изолированные каталоги под `src/Modules/` с манифестом `module.json`
|
||
и класс, расширяющий `BaseModule`. Полную информацию смотрите в разделе [Модульная система](modules.md).
|
||
|
||
```
|
||
src/Modules/my-module/
|
||
├── module.json # metadata
|
||
├── MyModuleModule.php # extends BaseModule, namespace XcVm\Module\MyModule
|
||
└── ...
|
||
```
|
||
|
||
---
|
||
|
||
## Контексты начальной загрузки
|
||
|
||
Четыре контекста определяют, какие подсистемы инициализируются. Смотрите [Контексты начальной загрузки](bootstrap-contexts.md).
|
||
|
||
|Контекст|Используется для|
|
||
| ------- | -------- |
|
||
| `BootContext::MINIMAL` |Скрипты, которым нужны только пути / конфигурация|
|
||
| `BootContext::CLI` |Задания Cron и команды CLI|
|
||
| `BootContext::STREAM` |Конечные точки потоковой передачи|
|
||
| `BootContext::ADMIN` |Панель администратора/реселлера|
|
||
|
||
---
|
||
|
||
## Варианты сборки (ОСНОВНАЯ и LB)
|
||
|
||
| |главный|фунт|
|
||
| --- | ---- | -- |
|
||
|Панель администратора|✅|❌|
|
||
|Потоковый|✅|✅|
|
||
|Модульная система|✅|подмножество|
|
||
|
||
Управляется перечислением `ServerEnvironment` и полем `module.json` `environment` (`main` / `lb` / `any`).
|
||
|
||
---
|
||
|
||
## Ключевые моменты расширения
|
||
|
||
|Механизм|Как использовать|
|
||
| --------- | ---------- |
|
||
|События PSR-14|атрибут `EventDispatcher::listen()` или `#[ListensTo]`|
|
||
|Оформление сервиса| `$container->decorate('id', callable, priority)` |
|
||
|Потоковое промежуточное программное обеспечение|Реализовать `StreamMiddlewareProviderInterface`|
|
||
|Записи Cron|Переопределить `getCronEntries()` в классе модуля|
|
||
|Миграции баз данных|Реализовать `MigratableInterface::getMigrations()`|
|
||
|
||
---
|
||
|
||
## Правила для участников
|
||
|
||
1. Модули не должны изменять основные файлы.
|
||
2. Никаких `eval`, исправлений ошибок или замены файлов во время выполнения.
|
||
3. Любой модуль можно отключить с помощью `config/modules.php`, не прикасаясь к ядру.
|
||
4. Защищенные сервисы (`db`, `settings`, `config`, `auth`) не могут быть оформлены.
|
||
5. Синхронизируйте документы EN и RU в одном и том же коммите.
|
||
|
||
## Связанные файлы
|
||
|
||
|Файл|Роль|
|
||
| --- | --- |
|
||
| `src/Core/` |Примитивы фреймворка (DI, события, HTTP, config, auth, ведение журнала)|
|
||
| `src/Domain/` |Бизнес-контексты (Поток, VOD, строка, Пользователь, Сервер, безопасность)|
|
||
| `src/Infrastructure/` |Внешние адаптеры (DatabaseFactory, CacheReader, Redis)|
|
||
| `src/Streaming/` |Подсистема потоковой передачи|
|
||
| `src/Modules/` |Дополнительные модули (загружаются с помощью ModuleLoader)|
|
||
| `src/Public/` |Передний контроллер, контроллеры, виды|
|
||
| `src/Cli/` |Консольные команды и задания cron|
|