food-market/docs/sprint22-progress.md
nns aa83f82dc5
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
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
feat(s22): data tooling — export/import + schema docs + anon dump (7 пунктов)
1. GDPR org export — domain OrgExport + Phase22a миграция, OrgExportJob
   собирает ZIP с JSON по каждой сущности через IObjectStorage,
   DownloadToken 64-hex + 24h TTL + email-notify.
   POST /api/org/export, GET /api/org/export[/{id}], GET download/{token}.

2. 1C CSV import — POST /api/catalog/products/import/1c-csv:
   Windows-1251/UTF-8 BOM auto-detect, разделитель ;/, русские заголовки
   (Артикул/Наименование/Единица/Цена/Группа/Штрихкод) или английские.
   Нормализация unit-кодов (шт/кг/г/л/мл/упак). Делегирует на ImportCsv
   (транзакция, multi-tenant). docs/imports.md.

3. deploy/anonymize-prod.sh — pg_dump прода → restore во временную БД →
   UPDATE PII (email→user{N}@example.kz, phone→+7700111{N:04}, password→
   тестовый hash, BIN/IIN синтетические, MoySkladToken=NULL, аудиты
   TRUNCATE) → pg_dump → gz файл.

4. DbSchemaDocsJob (weekly вс 05:00 UTC) — information_schema → md с
   таблицами + колонками + FK + mermaid ER-диаграммой (топ-20 таблиц).
   Сохраняет в content-root db-schema-generated.md.

5. POST /api/admin/audit-log/export?format=csv|jsonl — streaming через
   AsAsyncEnumerable. UTF-8 BOM для CSV, JSONL для grep'a. Multi-tenant.

6. GET /api/moysklad/sync-status — агрегат по import_jobs:
   { configured, lastSuccessAt, errorCountLast7Days, pendingCount,
     byKind: { products: KindStatus, counterparties: KindStatus } }.
   Stub если MoySkladToken=null.

7. docs/ARCHITECTURE.md — финальный итог 22 спринтов:
   - Sprint 13-22 changes-сводка
   - «Реализовано полностью» секция
   - «Scaffolding» таблица с указанием что нужно от user'а
   - «Не реализовано» секция (прод, SSO callback, KZ-перевод, POS-тест)
   - Актуальная файловая структура

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 23:00:54 +05:00

36 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Sprint 22 — data tooling: export/import, schema docs, anonymized dump
Цель: финальный спринт автономной работы. GDPR-ready export, 1С-import,
схема-документация, audit-export, anonymized stage dump, MoySklad status
endpoint, итоговый ARCHITECTURE.
Старт: 2026-06-07 (после Sprint 21). Исполнитель: Claude Opus 4.7.
**Последний автономный спринт — после очередь пустая, watchdog молчит.**
## Принципы
- Все export/import — multi-tenant строго (нельзя выгрузить чужое).
- Долгие операции — Hangfire job + status polling (не блокировать HTTP).
- НЕ трогать: `global.json`, prod admin.food-market.kz, POS WPF.
## Чек-лист
- [ ] **1. GDPR-export организации**`POST /api/org/export` для админа,
Hangfire job, ZIP с JSON каждой сущности, signed URL 24h, email-notify.
- [ ] **2. CSV-импорт каталога из 1С**`POST /api/catalog/import/1c-csv`,
preview → транзакция, multi-tenant. docs/imports.md.
- [ ] **3. Anonymized stage dump**`deploy/anonymize-prod.sh`:
pg_dump + PII-обфускация (email/phone/passwords/IIN).
- [ ] **4. DB schema auto-docs** — Hangfire weekly: `docs/db-schema.md`
с mermaid ER-диаграммой.
- [ ] **5. Audit-log export API**`POST /api/admin/audit/export`
csv/jsonl streaming, multi-tenant.
- [ ] **6. MoySklad sync-status**`GET /api/moysklad/sync-status`,
stub если не настроено.
- [ ] **7. Final ARCHITECTURE** — итоговый `docs/ARCHITECTURE.md`.
## Журнал
### 2026-06-07 старт
Sprint 21 закрыт (7/7 ✓). Поехали по data tooling — финальный sprint.