Some checks failed
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 API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Public / Build + push Public (push) Has been cancelled
Docker Public / Deploy Public on stage (push) Has been cancelled
1. TD-3 Mapster — Application/Mapping/MapsterConfig.cs с
TypeAdapterConfig для Product, Counterparty + collections.
ProductsController.List/Get/GetInternalAsync + CounterpartiesController.
List/Get переведены на .ProjectToType<TDto>(MapsterConfig.Config).
Inline Projection-Expression удалён.
2. SSO scaffold — Microsoft.AspNetCore.Authentication.Google + .MicrosoftAccount
пакеты, условная регистрация в Program.cs (только если ClientId задан).
ExternalAuthController с GET /api/auth/external/{provider} (Challenge или
503 если не настроено), /callback (501 с email — invite-flow TODO),
/providers (булевый список). docs/sso.md инструкция.
3. Stale-data cleanup — HousekeepingJobs расширен:
PruneOrgAuditLogAsync (>90д из Cleanup:OrgAuditLogDays),
PruneDraftsAsync (Supply/RetailSale/Demand старше 30д),
PruneRevokedRefreshTokensAsync (raw SQL DELETE из OpenIddictTokens).
3 новых cron'a в HangfireJobsConfigurator (03:00-03:20 UTC).
4. DB VACUUM automation — DatabaseMaintenanceJobs.VacuumTopTablesAsync:
pg_total_relation_size → топ-5 таблиц → VACUUM (ANALYZE) per table
с замером времени. Default cron еженедельно вс 04:00 UTC.
5. Disk usage monitoring — DiskMonitoringJob ежечасно: DriveInfo.AvailableFreeSpace
на пути из Monitoring:DiskPaths (default "/opt,/var/lib/docker").
<1GB → Telegram-alert на Monitoring:SuperAdminTelegramChatIds.
Anti-spam cooldown 6h. Gauge food_market_disk_free_bytes{mount}.
6. Performance regression detection — ~/nightly-perf-check.sh после
nightly-verify. Парсит /metrics, считает db_avg_ms, сравнивает с
baseline в ~/.fm-watchdog/perf-baseline.json. Δ>30% → Telegram alert
+ baseline НЕ обновляется (sliding window).
7. Public-site analytics placeholder — Astro BaseLayout рендерит
gtag/Yandex.Metrika только если задан PUBLIC_GA_ID / PUBLIC_YM_ID;
иначе <script data-id="REPLACE_ME" data-doc="docs/analytics.md">
маркер. docs/analytics.md с инструкцией подключения.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
44 lines
2.5 KiB
Markdown
44 lines
2.5 KiB
Markdown
# Sprint 20 — Mapster + SSO scaffolding + maintenance automation
|
||
|
||
Цель: закрыть TD-3 (Mapster вместо ручных LINQ-проекций), добавить
|
||
SSO-скелет (Google + Microsoft), включить maintenance-автоматику
|
||
(stale cleanup / VACUUM / disk / performance regression / analytics).
|
||
|
||
Старт: 2026-06-07 (после Sprint 19). Исполнитель: Claude Opus 4.7.
|
||
|
||
## Принципы
|
||
|
||
- Mapster — без AutoMapper (платный + CVE), config в `Application/Mapping/`.
|
||
- SSO — только скелет. Реальные client_id/secret не коммитим, пустые → 503.
|
||
- Hangfire jobs — идемпотентные, с лимитом на rows (не зачищать слишком много за раз).
|
||
- НЕ трогать: `global.json`, prod admin.food-market.kz, POS WPF.
|
||
|
||
## Чек-лист
|
||
|
||
- [ ] **1. TD-3 Mapster** — `MapsterConfig.cs` с TypeAdapterConfig'ом
|
||
для Product→ProductDto, Counterparty→CounterpartyDto. Замена
|
||
inline `Select(...)` на `.ProjectToType<TDto>()`. Бенчмарк до/после.
|
||
- [ ] **2. SSO Google + Microsoft scaffolding** — пакеты
|
||
`Microsoft.AspNetCore.Authentication.Google` + `.MicrosoftAccount`.
|
||
Endpoint `/api/auth/external/{provider}`, callback, связывание с
|
||
существующим Email или создание нового User+Employee. ApiClientId/
|
||
Secret из конфига; пустые → 503. docs/sso.md.
|
||
- [ ] **3. Stale-data cleanup автоматика** — Hangfire ежесуточно 03:00:
|
||
draft >30д, audit-log >90д, StockMovement >2г, refresh-tokens
|
||
revoked >7д. Конфиг `Cleanup:*` в appsettings.
|
||
- [ ] **4. DB VACUUM automation** — Hangfire еженедельно:
|
||
`VACUUM ANALYZE` на топ-5 таблиц по размеру. Лог времени.
|
||
- [ ] **5. Disk usage monitoring** — Hangfire ежечасно: free space
|
||
/opt и /var/lib/docker. <1GB → Telegram SuperAdmin'ам. Prom-метрика
|
||
`food_market_disk_free_bytes{mount="..."}`.
|
||
- [ ] **6. Performance regression detection** — nightly cron после
|
||
regression suite: prometheus p95 сравнение с вчерашним baseline.
|
||
Δ >30% → Telegram-alert.
|
||
- [ ] **7. Public-site analytics placeholder** — script tag в Astro
|
||
layout с `data-id="REPLACE_ME"`. docs/analytics.md с инструкцией.
|
||
|
||
## Журнал
|
||
|
||
### 2026-06-07 старт
|
||
Sprint 19 закрыт (7/7 ✓ + 1 hotfix). Начинаю tech debt + maintenance.
|