From 9ef9df3ed5bd94d2c8658554a161a6961949c1b3 Mon Sep 17 00:00:00 2001 From: nns Date: Wed, 27 May 2026 03:16:25 +0500 Subject: [PATCH] =?UTF-8?q?docs(sprint1):=20P1-21=20done=20=E2=80=94=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=209=20=D0=BF=D1=83=D0=BD=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?,=20=D0=B8=D1=82=D0=BE=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- docs/sprint1-progress.md | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/docs/sprint1-progress.md b/docs/sprint1-progress.md index 8755e69..92a879f 100644 --- a/docs/sprint1-progress.md +++ b/docs/sprint1-progress.md @@ -51,9 +51,39 @@ ✅ 23 теста зелёные. Чистая логика вынесена в Application (`MovingAverageCost`, `RetailPaymentValidator`) и используется контроллерами. StockService + query-filter на SQLite in-memory (EF8 поддерживает `ToJson`). `FakeTenantContext`, `SqliteDb` helper. -9. [ ] **P1-21 Integration-тесты** — Testcontainers.PostgreSql + WebApplicationFactory: +9. [x] **P1-21 Integration-тесты** — Testcontainers.PostgreSql + WebApplicationFactory: signup-flow, supply post→unpost, retail overselling, tenant isolation A vs B, permission-проверки. + ✅ `tests/food-market.IntegrationTests` — 10 тестов зелёные на реальном postgres:16-alpine + (Ryuk off, RateLimiting off через env). `ApiFactory`+`ApiActor`. Все 5 сценариев покрыты. + +## Итог + +**Все 9 пунктов выполнены.** Спринт 1 (стабилизация P0/P1-инфра) завершён 2026-05-27. + +Сводка: +- **P0-3** rate-limit (5/мин+20/час на IP, конфигурируем) — `AuthRateLimiterExtensions`. +- **P0-4** health `/health/live` + `/health/ready` (БД+миграции), compose/Dockerfile healthcheck. +- **P0-5** permission-based authz (`[RequiresPermission]` + handler по флагам роли), 10 контроллеров. +- **P0-1** OpenIddict prod X509-ключи из конфига, persistent self-signed. +- **P0-6** авто-бэкап (systemd timer + скрипт + ротация 30д) + `backup-restore.md`. +- **P0-8** `deploy/.env.example` + `secrets.md`. +- **P0-9** `release-checklist.md`. +- **P1-20** unit-тесты (23) — `MovingAverageCost`, `RetailPaymentValidator`, StockService, query-filter. +- **P1-21** integration-тесты (10) — Testcontainers + WebApplicationFactory. + +Сборка зелёная (`dotnet build src/food-market.api`); тесты: **23 unit + 10 integration = 33 зелёных**. +POS (net8.0-windows) на Linux не собирается — ожидаемо, вне scope. + +Пропущено намеренно (по инструкции): P0-7 ОФД (нужен внешний оператор), gateway nginx HTTPS, +`global.json` (локальный даунгрейд не коммитим). Установка backup-таймера/сертификатов на +prod-vm — отдельный деплой-шаг (артефакты готовы). + +### Эффект на код вне P0/P1 +- Чистая логика вынесена в Application (`MovingAverageCost`, `RetailPaymentValidator`) — контроллеры используют её. +- `Program` стал `public partial` для WebApplicationFactory. +- e2e `roles` step08: gap → реальная проверка permission-enforcement (8/8 зелёный). ## Лог -(заполняется по ходу) +- Каждый пункт: build + тесты + коммит порцией + отметка [x] + коммит прогресса. +- Все правки на ветке `main` (origin Forgejo), без коммита `global.json`.