Работающее демо · подготовлено 7 сентября 2026

Fullstack Test Shop

Магазин цифровых товаров с идемпотентными заказами, платёжным inbox и очередью выдачи. В демо можно пройти покупку, повторить событие и восстановить заказ после управляемого сбоя.

История реализации: 1–3 сентября 2026. Подготовка портфолио: 7 сентября 2026.Версия 767226bf14 кадров интерфейса

01 / Задача

От покупки до единственной выдачи

Повторный клик, повтор webhook и сбой поставщика не должны создавать второй заказ или повторную выдачу. Состояние операции должно оставаться понятным покупателю и оператору.

Для кого: Покупатели цифровых товаров и разработчики платёжных интеграций.

Мой вклад

  • Angular-витрина, карточка заказа и история переходов.
  • NestJS API, модель PostgreSQL, worker и HTTP-моки двух поставщиков.
  • Идемпотентность, восстановление, конкурентные проверки и production-развёртывание.
  • Для портфолио: подписанные сессии, собственный сброс, TTL и управляемый отказ одного заказа.

Интерфейс в работе

Сценарии, детали и состояния

02 / Технологии

Стек и его роль

Angular / TypeScript

Витрина, сигналы состояния, HTTP-клиент и polling заказа.

NestJS

Контракты, валидация, webhook, операции восстановления и границы демо.

PostgreSQL / Prisma

Снимки денег, inbox, очередь с lease, уникальные индексы и транзакции.

Node.js worker

HTTP-вызовы поставщиков вне короткой транзакции, retry и финальная выдача.

03 / Решения

Как устроен проект

  • Цена и скидка вычисляются на сервере и фиксируются в заказе.
  • Idempotency-Key защищён уникальным индексом; входные данные повтора сверяются с исходным намерением.
  • Webhook сначала сохраняется в durable inbox. Отдельный worker обрабатывает платёж и очередь выдачи.
  • Стабильный requestId поставщика сохраняется при повторе. Неоднозначный timeout не разрешает немедленно выдать второй код.
Компоненты опубликованного демо
Компоненты опубликованного демо

04 / Проверка

Что попробовать

  1. Выберите товар и выполните успешную тестовую оплату. Дождитесь кода и просмотрите историю.
  2. Повторите то же платёжное событие: код и выдача должны остаться единственными.
  3. Создайте заказ через сценарий сбоя, оплатите и нажмите «Восстановить мой заказ».
  4. Проверьте отказ оплаты, чужой UUID в другой сессии и сброс своего примера.

Подтверждённые результаты

  • Сохранено 14 содержательных кадров фактического интерфейса.
  • Дата, сценарий и версия указаны у каждого кадра.
  • Максимум RAM контейнеров в коротком тесте: 218.56 MiB. Общие службы учитываются отдельно; магазин включает свою БД.
  • Измерено 6 повторений сценария; медиана 129.0 мс, максимум 1939 мс. Время включает браузер и HTTPS; методика и ограничения приложены.

Границы и ограничения

  • Оплата и поставщики — явные моки; деньги не списываются, коды учебные.
  • До 20 заказов на сессию и 1000 новых демонстрационных заказов суммарно. TTL один час, очистка каждые пять минут.
  • Пример восстановления намеренно завершает первую попытку одного заказа ошибкой. Он не меняет глобальные режимы поставщиков.

Нужны детали реализации?

Архитектура, code-map, API, проверка, развёртывание и реальные измерения.

Открыть документацию →Скачать материалы ↓