Activity and nutrition legacy CSV imports enforce tier limits with UsageBadge UI; Universal CSV gets mapping validation on copy/import, format-check parity, and structured error_details. version: 0.9u module: activity 1.2.1, nutrition 1.0.3, csv_import 0.4.0 Co-authored-by: Cursor <cursoragent@cursor.com>
24 lines
1.2 KiB
Markdown
24 lines
1.2 KiB
Markdown
**Umsetzung 2026-07-23 (nach Architektur-Abgleich)**
|
|
|
|
## Architektur-Check vor Implementierung
|
|
|
|
- **Phase C (Schreibpfad):** laut `ACTIVITY_PRODUCTION_ARCHITECTURE_AND_PHASES.md` bereits erledigt (Sync abgestellt, Orchestrator als SSoT, keine Aufrufer von `sync_column_backed_session_metrics`). Keine Doppel-Implementierung.
|
|
- **Feature-ID:** Issue-Vorgabe `activity_entries` (nicht separates `activity_import`) — konsistent mit `create_activity` und Universal-CSV-Modul-Check in `csv_import.py`.
|
|
- **Legacy-Endpoint bleibt:** Frontend nutzt weiterhin `POST /api/activity/import-csv` (`ActivityPage` Apple-Health-Panel); Universal-Pfad ist parallel (ARCH §8.2).
|
|
|
|
## Änderungen
|
|
|
|
**Backend** (`routers/activity.py`):
|
|
- `check_feature_access(pid, "activity_entries")` vor Legacy-Import
|
|
- HTTP 403 bei Limit (wie `nutrition/import-csv`)
|
|
- `increment_feature_usage` pro neu eingefügter Zeile (`inserted`)
|
|
|
|
**Frontend** (`ActivityPage.jsx` ImportPanel):
|
|
- `UsageBadge` am Import-Titel
|
|
- Drop-Zone deaktiviert bei Limit
|
|
- Usage-Reload nach Import
|
|
|
|
**Tests:** `tests/test_activity_import_feature_enforcement.py` (403 + Increment)
|
|
|
|
Regression INSERT-SQL: `tests/test_activity_insert_sql.py` (grün)
|