food-market/docs/sprint9-progress.md
nns 76a175f491
Some checks are pending
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
feat(pwa+mobile+s9): PWA owner read-only + mobile tweaks + S9 stage specs
Sprint 9 пункт 3 (mobile-адаптация):
- DataTable: min-w-max sm:min-w-[640px] → узкие таблицы (Loyalty, Promotions)
  влезают на 375px без horizontal-scroll, широкие (Products) скроллятся
  внутри overflow-auto родителя.
- Mobile-audit спека (stage-ui-s9-mobile-audit) — 20 screenshot'ов в
  reports/mobile/ (375 + 768 viewport × 10 страниц + seed-demo).
  Smoke: no console-errors, layouts читаемы.

Sprint 9 пункт 4 (P2-9 PWA):
- public/manifest.webmanifest — read-only PWA владельца. Shortcuts:
  Дашборд, Sales/Profit/Stock отчёты. display=standalone (homescreen icon).
- public/sw.js — service worker:
  • SPA navigate: network-first + offline-fallback на /offline.html.
  • GET /api/*: network-first + cache-fallback (read-only кеш).
  • CSS/JS/SVG: stale-while-revalidate.
  • Мутации (POST/PUT/DELETE): не вмешиваемся, сеть.
- public/offline.html — статический fallback с кнопкой «Открыть дашборд».
- index.html: <link rel='manifest'>, apple-touch-meta, lang=ru-KZ.
- main.tsx: navigator.serviceWorker.register('/sw.js') в production only
  (dev hot-reload не мешает).
- deploy/nginx.conf: /sw.js no-cache, /manifest.webmanifest правильный
  content-type, /offline.html static.

Stage e2e:
- stage-ui-s9-loyalty.spec (4/4 ✓): programs/cards/promotions endpoints
  + UI рендер + SALE20 на 500₸ → total=400 (валидно через API).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 21:22:30 +05:00

2.4 KiB
Raw Blame History

Sprint 9 — лояльность, акции, mobile-адаптация, PWA

Цель: программы лояльности (баллы/% скидка) для постоянных покупателей, промокоды/акции в чеке, починить узкие экраны (телефон/планшет), PWA-обёртка владельца для отчётов с homescreen-икоником.

Старт: 2026-06-01. Исполнитель: Claude Opus 4.7 (автономный режим).

Это последний автономно-безопасный спринт. Дальше нужен человек: ОФД-интеграция, MoySklad-токены, POS WPF на Windows, kz-локализация, прод-деплой.

Принципы

  • Multi-tenant обязателен (OrganizationId на каждой новой таблице, query filter).
  • Каждый пункт: dotnet build + локальные тесты + ~/deploy-stage.sh + retest на https://test.admin.food-market.kz (включая mobile viewport 375x667).
  • НЕ трогать: global.json, прод-стек (admin.food-market.kz), POS WPF.

Чек-лист

  • 1. P2-12 Loyalty (программы + карты) — Phase9b миграция. LoyaltyProgramsController + LoyaltyCardsController (/issue, /lookup, /block). RetailSale: input.LoyaltyCardNumber → расчёт скидки/баллов; Post начисляет в card.Balance. UI: /loyalty/programs, /loyalty/cards. Тесты: 3/3 integration + 2/2 stage.
  • 2. P2-13 Promotions (промокоды/акции)Promotion (Percent|FixedDiscount, Scope, jsonb-массивы Guid, период, Code unique per org). PromotionsController. RetailSale: input.PromotionCode → lookup+matchingSubtotal+snapshot. UI: /promotions. Тесты: 2/2 integration + 2/2 stage.
  • 3. Mobile-адаптация — 375x667 + 768x1024 audit всех ключевых страниц. Таблицы → карточный режим на узких. Sidebar → drawer (уже есть). Screenshots до/после.
  • 4. P2-9 PWA владельца (read-only) — manifest.json + SW + offline-fallback на /dashboard/sales/profit/stock. Установка на homescreen. Lighthouse-аудит.

Журнал

2026-06-01 — старт

Sprint 8 закрыт (docs/sprint8-progress.md, 4/4 ✓, 8/8 stage e2e). Перехожу к пункту 1 (Loyalty).