From 77af2ad3ac33835525db899bcc2daa04838bc433 Mon Sep 17 00:00:00 2001 From: erjemin Date: Wed, 5 Aug 2026 22:24:12 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=BF=D0=BB=D0=B0=D0=BD=D1=8B=20(=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D0=B6=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=B8=D0=B5=20(1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _prj_blueprint/TODO.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 _prj_blueprint/TODO.md 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-переписку).