docs(sprint1): P1-21 done — все 9 пунктов выполнены, итог

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-27 03:16:25 +05:00
parent f2dad91e05
commit 9ef9df3ed5

View file

@ -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`.