# План задач (TODO) **Дата и время обновления:** 03.08.2026 22:24 **Проект:** LPON.RU (Django 6.0+, Python 3.12) --- ## 1. Архитектура и База данных (Бэкенд) - [ ] **Реализовать модель алиасов слагов `TbArticleAlias` (для HTTP 301 редиректов при переименовании слагов)** - *Описание:* Для SQLite вариант с отдельной моделью и B-Tree индексом (`s_old_slug` -> `ForeignKey(TbArticle)`) работает значительно быстрее поиска по JSON-полю (`O(1)` вместо сканирования таблицы). - *Детали:* - Создать модель `TbArticleAlias` (`s_old_slug = SlugField(unique=True, db_index=True)`, `k_article = ForeignKey(TbArticle)`). - При изменении `s_article_slug` в админке автоматически сохранять предыдущий слаг в `TbArticleAlias`. - В `UniversalSlugView` добавить двухэтапный поиск: 1. Поиск по `TbArticle.s_article_slug` -> если найден, рендерим (или 301 на канонический URL). 2. Если не найден, поиск по `TbArticleAlias.s_old_slug` -> если найден, рендерим `HTTP 301 Permanent Redirect` на актуальный URL статьи. 3. Если не найден нигде -> `HTTP 404` (с блоком-подсказкой для `request.user.is_staff`). - *Приоритет:* Полезная архитектурная фича на будущее (низкий / плановый приоритет). --- ## 2. DSL-парсер Страниц-Хабов и Динамических Модулей - [ ] **Замена списочных вьюх/шаблонов на универсальные DSL-хабы** - *Описание:* Отказаться от создания специализированных views и templates под каждый раздел с карточками/списками (например, `/info/`, `/blog/`). Любой список разделов или статей становится частным случаем хаба со статьей `l_article_type == 'HUB'`. - *Детали:* - Отдельные списочные вьюхи (например, `txt_articles_list`) упраздняются в пользу единого диспетчера хабов `HubView`. - Все сущности и статьи генерируют свои канонические URL через `get_absolute_url()` модели `TbArticle`, исключая путаницу префиксов в ссылках внутри блоков хаба. - *Приоритет:* Средний (по мере реализации DSL-парсера). - [ ] **Реализовать DSL-парсер Страниц-Хабов (`j_article_metadata['hub']`)** - Поддержка позиционных кортежей `["slug", "view_mode", limit, "sort", extra]`. - Поддержка динамических модулей по префиксу `!` (`["!cart-app"]`, `["!promo-mandarin"]`). - Защита от рекурсии (`visited_slugs`, `MAX_RECURSION_DEPTH = 2`). - *Приоритет:* Высокий ## 3. Анонимные Заказы и Бесконтактная Корзина (Stateless Orders) - [ ] **Бесконтактная Корзина и Заказы (Stateless Orders)** - Реализация модуля `!cart-app` на клиенте (Cookies/LocalStorage) без записи ПДн клиентов в БД сайта. - Интеграция с виджетом СДЭК и сохранение только трек-номеров. - *Приоритет:* Средний (для MVP можно временно использовать email-переписку).