diff --git a/_prj_blueprint/TODO.md b/_prj_blueprint/TODO.md new file mode 100644 index 0000000..d47f446 --- /dev/null +++ b/_prj_blueprint/TODO.md @@ -0,0 +1,36 @@ +# План задач (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-парсер Страниц-Хабов (`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-переписку).