Files
2018-lpon-site/_prj_blueprint/STATELESS-ORDERS.md

46 lines
5.4 KiB
Markdown

# Архитектурные решения: Анонимные Заказы (Stateless Cart & Orders)
**Дата и время создания:** 02.08.2026 23:54
**Проект:** LPON.RU (Django 6.0+, Python 3.12)
**Статус:** Согласованная архитектура
---
## 1. Бесконтактная Корзина и Заказы без Персональных Данных (Privacy-First / Stateless Orders)
### 1.1. Концепция полного отказа от ПДн
- **Проблема:** Хранение персональных данных клиентов (ФИО, телефон, адрес доставки, e-mail, паспорта) накладывает жесткие юридические обязательства (152-ФЗ), требует аттестации БД, согласий на обработку ПДн и несёт риски утечек.
- **Решение:** Полный отказ от хранения ПДн клиентов в базе данных LPON.RU. Сайт работает как смарт-витрина и генератор заказов, а персональные данные либо вообще не собираются, либо обрабатываются внешними специализированными сервисами (Авито, СДЭК, Яндекс.Доставка, эквайринг).
### 1.2. Архитектура клиентоориентированной корзины (Stateless Cart)
1. **Хранение состава корзины:**
- Состав корзины хранится исключительно на стороне клиента: в `Session Cookies` или `LocalStorage`.
- В БД LPON.RU записи корзины пользователей НЕ создаются.
2. **Идентификация товаров:**
- В корзине сохраняется список уникальных кодов офферов (`s_offer_code`, сгенерированных через Hashids) и их количество: `{"codes": {"4gfFCJ": 1, "9xK2Lm": 2}}`.
- Все данные о цене, названии и наличии запрашиваются у сервера динамически по списку `s_offer_code`.
3. **DSL-модуль корзины (`!cart-app`):**
- Страница `/cart/` создаётся как стандартная статья-хаб `TbArticle` (тип `HUB`), в метаданные которой встроен динамический модуль `["!cart-app"]`.
- Это позволяет нативно обвешивать страницу корзины маркетинговыми блоками через DSL (например, выводить снизу карусель товаров `["cassettes-sale", "carousel"]`).
### 1.3. Способы оформления заказа без сохранения ПДн в БД LPON.RU
#### Вариант А: Оформление через Авито / Маркетплейсы
- По кнопке «Оформить» сайт формирует ссылку или готовый текст заказа для перехода на профиль продавца на Авито.
- Покупатель оформляет сделку через безопасную сделку Авито-Доставки. LPON.RU вообще не касается данных о доставке и оплате.
#### Вариант Б: Интеграция со СДЭК / Яндекс.Доставкой через виджет
- При выборе доставки СДЭК прямо на странице корзины открывается официальный виджет СДЭК. Посылка "наложенным платежом" (что, кстати, защитит от недобросовестных покупателей, которые получают одно, а возвращают другое. Покупатель все проверяет при получении, а деньги СДЭК переводит только после подтверждения получения).
- Клиент вводит свои данные (ФИО, пункт выдачи, телефон) **напрямую в формы виджета СДЭК**.
- Сервер LPON.RU получает от API СДЭК только **Трек-номер (Waybill ID)**.
- На стороне LPON.RU в журнале анонимных транзакций сохраняется лишь минимальная агрегированная запись:
- Идентификатор заказа (`Order Hash`);
- Состав офферов (`s_offer_code`);
- Трек-номер СДЭК;
- Статус оплаты/доставки.
- *Данные получателя в БД LPON.RU отсутствуют.*
#### Вариант В: Анонимный статус заказа по Токену
- Покупатель получает уникальную ссылку вида `lpon.ru/order/<order_hash>/` (или хранит токен в куках/LocalStorage).
- По этой ссылке клиент может проверить текущий статус посылки (информация подтягивается из API СДЭК/Почты по трек-номеру в реальном времени) без необходимости авторизации и ввода личных данных.