feat(circles): create_circle + add_member_to_circle (v0.7.0)

- acccreatefamily endpoint creates a new circle (returns numeric ID)
- accinvite endpoint invites new users by email (familyId, identifier, role, firstname)
- fw_client now detects a00.ex errors (was only checking a00.un before)
- New modules/circles.py with FamilyRoleTypeEnum constants
- SPEC.md updated with acccreatefamily, accinvite, accupdatefamily docs
- Note: circle deletion not supported by FW API (metadelete → "delete not supported")
- Note: accinvite only works for new (non-existing) FW accounts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-16 17:59:20 +02:00
parent 498d5781c5
commit 2bc03e2165
8 changed files with 255 additions and 14 deletions
+70 -1
View File
@@ -491,11 +491,80 @@ a00.r.r → "true" (String)
**Verifiziert am:** 2026-04-16 via FW_DEBUG=1
### `acccreatefamily` Kreis erstellen
POST https://api.familywall.com/api/acccreatefamily
**Body-Parameter:**
| Parameter | Pflicht | Wert |
|---|---|---|
| `name` | ja | Kreis-Name |
**Response:**
```
a00.r.r → numerische Kreis-ID als String (z.B. "23447369")
→ vollständige metaId: "family/" + id
```
**Hinweise:**
- Der Server kapitalisiert den ersten Buchstaben des Namens.
- Kreise können über die API nicht gelöscht werden (`metadelete` → "delete not supported").
- Vollständige Kreisdaten (incl. Name) via `famlistfamily` im gleichen Session-Call abrufbar.
**Verifiziert am:** 2026-04-16 via FW_DEBUG=1
### `accinvite` Mitglied einladen
POST https://api.familywall.com/api/accinvite
**Body-Parameter:**
| Parameter | Pflicht | Wert |
|---|---|---|
| `familyId` | ja | Kreis-metaId (z.B. `"family/23447369"`) |
| `identifier` | ja | E-Mail-Adresse des Eingeladenen |
| `role` | ja | `"Unknown"` (einziger verifizierter Enum-Wert für `FamilyRoleTypeEnum`) |
| `firstname` | ja | Vorname des Eingeladenen |
**Einschränkung:** Der Endpoint funktioniert nur für Personen, die noch kein
Family Wall-Konto haben. Bei bestehenden Accounts antwortet der Server mit:
`"This api is now only used to create and invite an account with login only."`
**Fehler-Struktur** (HTTP 200, aber Fehler unter `a00.ex`):**
```json
{"a00": {"ex": {"ex": {"FiZClassId": "17", "message": "..."}}}}
```
`fw_client.py` prüft `a00.ex` und wirft `FamilyWallError`.
**Response (Erfolg):**
```
a00.r.r → Einladungsobjekt (Struktur unbekannt, da nicht testbar mit Test-Account)
```
**Bekannte Enum-Werte für `role`:**
- `"Unknown"` ✓ verifiziert
- `"Parent"`, `"Child"``FamilyRoleTypeEnum` decode error
**Verifiziert am:** 2026-04-16 via FW_DEBUG=1
### `accupdatefamily` Kreis umbenennen
POST https://api.familywall.com/api/accupdatefamily
**Body-Parameter:**
| Parameter | Pflicht | Wert |
|---|---|---|
| `name` | ja | Neuer Kreis-Name |
**Hinweis:** Aktualisiert immer den PRIMARY Kreis des Accounts (ignoriert `id`/`familyId` Parameter).
**Verifiziert am:** 2026-04-16 via FW_DEBUG=1
## Offene Punkte
- Unlike-Endpoint (Service Worker blockiert Analyse)
- Erinnerungen (reminder) nur Premium-Account
- Wiederholungen (repeat) nur Premium-Account
- Sortierung von Kategorien via API
- update_recipe (Rezept aktualisieren) Endpoint: mprecipeput mit metaId
- mpadditemtolist (Zutaten aus Rezept → Einkaufsliste)
- Einladung bestehender FamilyWall-Nutzer (accinvite nur für neue Accounts)
- Kreis-Delete-Endpoint (API: "delete not supported" für family-Objekte)