LoVisual/backend/TODO.md
loki5512344 52d87368c9 chore(history): squash 10 commit(s) from 2026-07-31
- feat: Фаза 1 ребрендинг combatant → lovisual + восстановление config
- refactor: Фаза 2 — выкинуть Runtime/JarReplacement, заменить на Lifecycle
- refactor: Фаза 3.5 — удалить читерские модули, ESP под легит
- refactor: Фаза 3 — разбить Renderer2D (3379→2150 фасад + 14 хелперов ≤200)
- refactor: Фаза 3 — разбить BetterChatRenderer (2870→210 фасад + 21 хелпер ≤200)
- refactor: Фаза 3 — разбить UnifiedSettingRenderer (2798→208 фасад + 24 хелпера ≤200)
- refactor: Фаза 3 — разбить ClickGuiRenderer (1887→542 фасад + 15 хелперов ≤200)
- refactor: Фаза 3 — разбить NameTags (1791→438 фасад + 11 хелперов ≤200)
- refactor: Фаза 3 — разбить TargetHud (1655→340 фасад + 11 хелперов ≤200)
- refactor: Фаза 3 — разбить ESP (1538→269 фасад + 11 хелперов ≤200)
2026-07-31 23:14:14 +02:00

2.6 KiB
Raw Blame History

LoVisual Backend (Rust + axum)

Правила (ОБЯЗАТЕЛЬНЫЕ, нарушение = откат)

  • KISS / DRY / SOLID — простая структура, без оверинжиниринга
  • Макс. 200 строк на файл — превышение = разбить на модули
  • Макс. 3 файла на папку — больше = новая подпапка по смыслу
  • Обязательное прохождение: cargo fmt + cargo clippy --all-targets (ноль ошибок) + cargo test
  • Запрещено #[allow(dead_code)] — мёртвый код удаляется, не прячется
  • Запрещено unsafe (в собственной логике; lints: unsafe_code = "forbid")
  • Без пустышек — модуль создаётся только с рабочей реализацией
  • Каждый этап компилируется — перед переходом к следующему
  • Ошибки JSON-декода не игнорировать — всегда .context()/?
  • user_id из токена, не из тела запроса

Сделано

  • Каркас: main.rs + server/{mod,config} + routes/{mod,health}
  • GET /health + graceful shutdown (SIGTERM/SIGINT)
  • Config из env (LOVISUAL_HOST/PORT/CORS_ORIGINS), валидация на старте
  • CORS (настраиваемые origins) + tower TraceLayer
  • Rust 2024 edition, актуальные версии пакетов

Фаза 1: DB (SQLite, sqlx)

  • src/db/mod.rs — подключение, миграции
  • src/db/users.rs — таблица users
  • src/db/configs.rs — облачные конфиги
  • src/db/profiles.rs — профили, playtime, friends

Фаза 2: Auth

  • src/auth/mod.rs — argon2 + JWT (jsonwebtoken)
  • src/auth/handlers.rs — register/login/logout
  • src/auth/middleware.rs — Bearer token → 401, не panic

Фаза 3: Profile API

  • src/profile/mod.rs — get/update/playtime/search/friends

Фаза 4: Configs API

  • src/config_api/mod.rs — upload/download
  • 16-byte share keys (минимум)

Фаза 5: IRC

  • src/irc/mod.rs — WebSocket хаб (axum + tokio-tungstenite)

Фаза 6: Middleware

  • RateLimit — с cleanup-задачей (без утечки)
  • Request logging через tracing

Проверка после каждой фазы: cargo fmt && cargo clippy --all-targets && cargo test