Server: Inventar zwischen Usern teilen (Inventory Sharing) #59

Closed
opened 2026-05-16 17:13:06 +00:00 by jreinemann-euris · 1 comment
jreinemann-euris commented 2026-05-16 17:13:06 +00:00 (Migrated from github.com)

Ziel

Mehrere Benutzer können sich ein gemeinsames Inventar teilen. Jeder neue User bekommt per default ein eigenes Inventar; es soll aber möglich sein, ihm ein bestehendes Inventar zuzuweisen.

Hintergrund / Szenario

Meine Freundin soll einen eigenen Account bekommen, aber dasselbe Inventar sehen und bearbeiten können wie ich. Programmatisch gibt es weiterhin nur ein Inventar-Objekt – aber mehrere User können darauf zugreifen.

Anforderungen

Datenmodell

  • Relation User ↔ Inventory ist N:1 (viele User → ein Inventar), nicht 1:1
  • Jeder neue User bekommt automatisch ein neues, leeres Inventar (Standardverhalten bleibt unverändert)
  • Ein User kann einem bestehenden Inventar zugewiesen werden (Sharing aktivieren)
  • Ein User kann von seinem aktuellen Inventar getrennt werden; danach wird ihm entweder ein bestehendes oder ein neues Inventar zugewiesen

Automatische Bereinigung

  • Wenn ein User von einem Inventar getrennt wird und dieses Inventar keine weiteren User hat und leer ist (keine Items), wird es automatisch gelöscht

Webmaske (Admin-UI)

  • Auf der Server-Webmaske gibt es eine Benutzerverwaltung mit folgenden Aktionen pro User:
    • Inventar wechseln: Dropdown mit allen vorhandenen Inventaren → User diesem Inventar zuweisen
    • Inventar trennen: User vom aktuellen Inventar lösen (mit anschließender Zuweisung eines neuen oder bestehenden Inventars)
    • Neues Inventar erstellen: für den User ein frisches Inventar anlegen (z.B. nach Trennung)
  • Anzeige: Welche User teilen aktuell welches Inventar (gruppierte Übersicht)

API (Server)

  • Neuer Endpunkt oder Erweiterung bestehender User-Endpoints zum Verwalten der Inventar-Zuweisung
  • Authentifizierung und Autorisierung: nur Admins dürfen Inventar-Zuweisungen ändern

Akzeptanzkriterien

  • Zwei User können dasselbe Inventar sehen und bearbeiten
  • Neuer User bekommt automatisch ein eigenes Inventar
  • Admin kann in der Webmaske User-Inventar-Zuweisungen ändern
  • Beim Trennen: leeres, verwaistes Inventar wird automatisch gelöscht
  • Alle bestehenden Tests laufen weiterhin grün
  • Neue Integrationstests für Sharing-Szenarien vorhanden

Out of Scope (für dieses Ticket)

  • Berechtigungskonzept innerhalb eines geteilten Inventars (z.B. read-only vs. read-write pro User) → separates Ticket
  • Push-Benachrichtigungen bei Änderungen durch den anderen User → separates Ticket (WebSocket/Messaging)
## Ziel Mehrere Benutzer können sich ein gemeinsames Inventar teilen. Jeder neue User bekommt per default ein eigenes Inventar; es soll aber möglich sein, ihm ein bestehendes Inventar zuzuweisen. ## Hintergrund / Szenario Meine Freundin soll einen eigenen Account bekommen, aber dasselbe Inventar sehen und bearbeiten können wie ich. Programmatisch gibt es weiterhin nur **ein** Inventar-Objekt – aber mehrere User können darauf zugreifen. ## Anforderungen ### Datenmodell - Relation `User ↔ Inventory` ist **N:1** (viele User → ein Inventar), nicht 1:1 - Jeder neue User bekommt automatisch ein neues, leeres Inventar (Standardverhalten bleibt unverändert) - Ein User kann einem **bestehenden** Inventar zugewiesen werden (Sharing aktivieren) - Ein User kann von seinem aktuellen Inventar **getrennt** werden; danach wird ihm entweder ein bestehendes oder ein neues Inventar zugewiesen ### Automatische Bereinigung - Wenn ein User von einem Inventar getrennt wird und dieses Inventar **keine weiteren User** hat **und leer ist** (keine Items), wird es automatisch gelöscht ### Webmaske (Admin-UI) - Auf der Server-Webmaske gibt es eine Benutzerverwaltung mit folgenden Aktionen pro User: - **Inventar wechseln**: Dropdown mit allen vorhandenen Inventaren → User diesem Inventar zuweisen - **Inventar trennen**: User vom aktuellen Inventar lösen (mit anschließender Zuweisung eines neuen oder bestehenden Inventars) - **Neues Inventar erstellen**: für den User ein frisches Inventar anlegen (z.B. nach Trennung) - Anzeige: Welche User teilen aktuell welches Inventar (gruppierte Übersicht) ### API (Server) - Neuer Endpunkt oder Erweiterung bestehender User-Endpoints zum Verwalten der Inventar-Zuweisung - Authentifizierung und Autorisierung: nur Admins dürfen Inventar-Zuweisungen ändern ## Akzeptanzkriterien - [ ] Zwei User können dasselbe Inventar sehen und bearbeiten - [ ] Neuer User bekommt automatisch ein eigenes Inventar - [ ] Admin kann in der Webmaske User-Inventar-Zuweisungen ändern - [ ] Beim Trennen: leeres, verwaistes Inventar wird automatisch gelöscht - [ ] Alle bestehenden Tests laufen weiterhin grün - [ ] Neue Integrationstests für Sharing-Szenarien vorhanden ## Out of Scope (für dieses Ticket) - Berechtigungskonzept innerhalb eines geteilten Inventars (z.B. read-only vs. read-write pro User) → separates Ticket - Push-Benachrichtigungen bei Änderungen durch den anderen User → separates Ticket (WebSocket/Messaging)
jreinemann-euris commented 2026-05-16 22:35:37 +00:00 (Migrated from github.com)

Abgeschlossen (17.05.2026)

Zyklen: 1 Implementierung + 1 Code-Review-Korrektur
Tests: 48 Server-Tests, 0 Fehler (inkl. 8 neue Sharing-Tests)

Implementierte Artefakte

  • Datenmodell (N:1): \Inventories-Tabelle, \Users.inventory_id\ FK, \inventory_id\ in Items/Categories/Locations/Settings
  • Schema-Migration: Automatische Data-Migration beim Server-Start (user_id → inventory_id für bestehende Daten)
  • InventoryRepository: \getEffectiveInventoryId(), \createInventory(), \ssignUserToInventory(), \cleanupOrphanedInventory(), \listInventoriesWithUsers()\
  • UserRepository: \create()\ legt automatisch ein neues Inventar an
  • API: \PUT /api/admin/users/{id}/inventory, \POST /api/admin/users/{id}/inventory/new, \GET /api/admin/inventories\
  • Admin-UI: Inventar-Spalte, Modal 'Inventar wechseln', Button 'Neues Inventar', gruppierte Inventar-Übersicht
  • Backward-Kompatibilität: JWT-Only-User (ohne DB-Eintrag) nutzen userId als Fallback-InventoryId

Abweichungen

Keine – alle Akzeptanzkriterien erfüllt.

## Abgeschlossen (17.05.2026) **Zyklen:** 1 Implementierung + 1 Code-Review-Korrektur **Tests:** ✅ 48 Server-Tests, 0 Fehler (inkl. 8 neue Sharing-Tests) ### Implementierte Artefakte - ✅ **Datenmodell (N:1):** \Inventories\-Tabelle, \Users.inventory_id\ FK, \inventory_id\ in Items/Categories/Locations/Settings - ✅ **Schema-Migration:** Automatische Data-Migration beim Server-Start (user_id → inventory_id für bestehende Daten) - ✅ **InventoryRepository:** \getEffectiveInventoryId()\, \createInventory()\, \ssignUserToInventory()\, \cleanupOrphanedInventory()\, \listInventoriesWithUsers()\ - ✅ **UserRepository:** \create()\ legt automatisch ein neues Inventar an - ✅ **API:** \PUT /api/admin/users/{id}/inventory\, \POST /api/admin/users/{id}/inventory/new\, \GET /api/admin/inventories\ - ✅ **Admin-UI:** Inventar-Spalte, Modal 'Inventar wechseln', Button 'Neues Inventar', gruppierte Inventar-Übersicht - ✅ **Backward-Kompatibilität:** JWT-Only-User (ohne DB-Eintrag) nutzen userId als Fallback-InventoryId ### Abweichungen Keine – alle Akzeptanzkriterien erfüllt.
Sign in to join this conversation.
No description provided.