Feature-Enforcement f�r Nutrition CSV-Import UI #38

Closed
opened 2026-03-23 22:32:50 +01:00 by Lars · 1 comment
Owner

Priorit�t: Low
Aufwand: 1h

Beschreibung

Nutrition CSV-Import (FDDB) hat bereits Backend-Enforcement (check_feature_access() + increment_feature_usage()), aber die UI zeigt keine Badges und die Import-Zone wird nicht deaktiviert.

Problem

  • Endpoint: POST /api/nutrition/import-csv
  • Feature-ID: nutrition_entries (z�hlt, aber blockiert nicht proaktiv)
  • Status: Backend OK, Frontend fehlt
  • UI zeigt keine Usage-Badges
  • Import-Zone wird nicht deaktiviert bei Limit

L�sung

Frontend (NutritionPage.jsx)

  1. Usage-Badge auf Import-Panel hinzuf�gen:

    <div className="card-title">
      Import
      <UsageBadge featureId="nutrition_entries"/>
    </div>
    
  2. Import-Zone deaktivieren bei Limit:

    const usage = await api.getFeatureUsage("nutrition_entries")
    const disabled = !usage.allowed
    
    <div className={disabled ? "import-zone-disabled" : "import-zone"}>
      {disabled && <div className="overlay">Limit erreicht</div>}
      {/* Drag & Drop + Button */}
    </div>
    
  3. Alternativ: Nur Error-Message nach Versuch (aktuelles Verhalten, einfacher)

Betroffene Dateien

  • frontend/src/pages/NutritionPage.jsx (Import Panel)

Akzeptanzkriterien

  • Usage-Badge sichtbar
  • Import-Zone deaktiviert bei Limit (optional)
  • Error-Handling funktioniert

Quelle: .claude/docs/PENDING_FEATURES.md

**Priorit�t:** Low **Aufwand:** 1h ## Beschreibung Nutrition CSV-Import (FDDB) hat bereits Backend-Enforcement (`check_feature_access()` + `increment_feature_usage()`), aber die UI zeigt keine Badges und die Import-Zone wird nicht deaktiviert. ## Problem - **Endpoint:** `POST /api/nutrition/import-csv` - **Feature-ID:** `nutrition_entries` (z�hlt, aber blockiert nicht proaktiv) - **Status:** Backend OK, Frontend fehlt - UI zeigt keine Usage-Badges - Import-Zone wird nicht deaktiviert bei Limit ## L�sung ### Frontend (NutritionPage.jsx) 1. Usage-Badge auf Import-Panel hinzuf�gen: ```jsx <div className="card-title"> Import <UsageBadge featureId="nutrition_entries"/> </div> ``` 2. Import-Zone deaktivieren bei Limit: ```jsx const usage = await api.getFeatureUsage("nutrition_entries") const disabled = !usage.allowed <div className={disabled ? "import-zone-disabled" : "import-zone"}> {disabled && <div className="overlay">Limit erreicht</div>} {/* Drag & Drop + Button */} </div> ``` 3. Alternativ: Nur Error-Message nach Versuch (aktuelles Verhalten, einfacher) ## Betroffene Dateien - `frontend/src/pages/NutritionPage.jsx` (Import Panel) ## Akzeptanzkriterien - [ ] Usage-Badge sichtbar - [ ] Import-Zone deaktiviert bei Limit (optional) - [ ] Error-Handling funktioniert --- **Quelle:** `.claude/docs/PENDING_FEATURES.md`
Lars added the
feature
high
labels 2026-03-23 22:32:50 +01:00
Author
Owner

Umsetzung 2026-07-23 (UI-Teil; Backend war bereits erledigt)

Ist-Zustand vorher

  • Backend: POST /api/nutrition/import-csv mit check_feature_access('nutrition_entries') und HTTP 403 — bereits implementiert
  • Frontend: FDDB-Import ohne Usage-Anzeige, Drop-Zone blieb bei Limit klickbar

Änderungen

Frontend (NutritionPage.jsx, ImportPanel):

  • getFeatureUsage()nutrition_entries
  • UsageBadge am Import-Titel
  • Drop-Zone und Paste-Import deaktiviert bei Limit
  • Usage-Reload nach erfolgreichem Import

Analog zu Activity #37 (geschlossen 2026-07-23).

Playwright: tests/issue-audit.spec.js — Badge am FDDB-Panel

Hinweis

Universal-CSV (/api/csv-import/import) prüft zusätzlich data_import — Legacy FDDB-Pfad folgt dem Nutrition-Muster (nur nutrition_entries), konsistent mit Architektur §8.2.

**Umsetzung 2026-07-23 (UI-Teil; Backend war bereits erledigt)** ## Ist-Zustand vorher - Backend: `POST /api/nutrition/import-csv` mit `check_feature_access('nutrition_entries')` und HTTP 403 — **bereits implementiert** - Frontend: FDDB-Import ohne Usage-Anzeige, Drop-Zone blieb bei Limit klickbar ## Änderungen **Frontend** (`NutritionPage.jsx`, ImportPanel): - `getFeatureUsage()` → `nutrition_entries` - `UsageBadge` am Import-Titel - Drop-Zone und Paste-Import deaktiviert bei Limit - Usage-Reload nach erfolgreichem Import Analog zu Activity #37 (geschlossen 2026-07-23). **Playwright:** `tests/issue-audit.spec.js` — Badge am FDDB-Panel ## Hinweis Universal-CSV (`/api/csv-import/import`) prüft zusätzlich `data_import` — Legacy FDDB-Pfad folgt dem Nutrition-Muster (nur `nutrition_entries`), konsistent mit Architektur §8.2.
Lars closed this issue 2026-07-23 11:05:55 +02:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Lars/mitai-jinkendo#38
No description provided.